2
0
Эх сурвалжийг харах

removed old python binding

Teseo Schneider 6 жил өмнө
parent
commit
3d8635fcfb
100 өөрчлөгдсөн 2 нэмэгдсэн , 6275 устгасан
  1. 0 5
      .appveyor.yml
  2. 1 7
      CMakeLists.txt
  3. 1 7
      cmake/libigl.cmake
  4. 0 165
      python/CMakeLists.txt
  5. 0 64
      python/iglhelpers.py
  6. 0 18
      python/matlab/example1.m
  7. 0 60
      python/matlab/example2.m
  8. 0 3
      python/matlab/launch_viewer.m
  9. 0 19
      python/matlab/m2p.m
  10. 0 17
      python/matlab/p2m.m
  11. 0 29
      python/modules/copyleft/py_igl_cgal.cpp
  12. 0 26
      python/modules/copyleft/py_igl_comiso.cpp
  13. 0 27
      python/modules/copyleft/py_igl_copyleft.cpp
  14. 0 25
      python/modules/copyleft/py_igl_tetgen.cpp
  15. 0 29
      python/modules/py_igl_embree.cpp
  16. 0 453
      python/modules/py_igl_opengl_glfw.cpp
  17. 0 23
      python/modules/py_igl_png.cpp
  18. 0 25
      python/modules/py_igl_triangle.cpp
  19. 0 26
      python/modules/py_typedefs.cpp
  20. 0 23
      python/modules/py_typedefs.h
  21. 0 777
      python/modules/py_vector.cpp
  22. 0 1530
      python/py_doc.cpp
  23. 0 132
      python/py_doc.h
  24. 0 208
      python/py_igl.cpp
  25. 0 21
      python/py_igl/copyleft/cgal/py_RemeshSelfIntersectionsParam.cpp
  26. 0 114
      python/py_igl/copyleft/cgal/py_mesh_boolean.cpp
  27. 0 29
      python/py_igl/copyleft/cgal/py_remesh_self_intersections.cpp
  28. 0 63
      python/py_igl/copyleft/comiso/py_miq.cpp
  29. 0 67
      python/py_igl/copyleft/comiso/py_nrosy.cpp
  30. 0 28
      python/py_igl/copyleft/py_marching_cubes.cpp
  31. 0 26
      python/py_igl/copyleft/py_swept_volume.cpp
  32. 0 39
      python/py_igl/copyleft/tetgen/py_tetrahedralize.cpp
  33. 0 23
      python/py_igl/embree/py_ambient_occlusion.cpp
  34. 0 20
      python/py_igl/embree/py_line_mesh_intersection.cpp
  35. 0 44
      python/py_igl/embree/py_reorient_facets_raycast.cpp
  36. 0 21
      python/py_igl/png/py_readPNG.cpp
  37. 0 22
      python/py_igl/png/py_writePNG.cpp
  38. 0 21
      python/py_igl/py_AABB.cpp
  39. 0 14
      python/py_igl/py_ARAPEnergyType.cpp
  40. 0 17
      python/py_igl/py_MeshBooleanType.cpp
  41. 0 13
      python/py_igl/py_SolverStatus.cpp
  42. 0 55
      python/py_igl/py_active_set.cpp
  43. 0 10
      python/py_igl/py_adjacency_list.cpp
  44. 0 10
      python/py_igl/py_adjacency_matrix.cpp
  45. 0 68
      python/py_igl/py_arap.cpp
  46. 0 16
      python/py_igl/py_avg_edge_length.cpp
  47. 0 17
      python/py_igl/py_barycenter.cpp
  48. 0 36
      python/py_igl/py_barycentric_coordinates.cpp
  49. 0 19
      python/py_igl/py_barycentric_to_global.cpp
  50. 0 40
      python/py_igl/py_bbw.cpp
  51. 0 31
      python/py_igl/py_boundary_conditions.cpp
  52. 0 37
      python/py_igl/py_boundary_facets.cpp
  53. 0 40
      python/py_igl/py_boundary_loop.cpp
  54. 0 63
      python/py_igl/py_cat.cpp
  55. 0 94
      python/py_igl/py_collapse_edge.cpp
  56. 0 81
      python/py_igl/py_colon.cpp
  57. 0 17
      python/py_igl/py_column_to_quats.cpp
  58. 0 20
      python/py_igl/py_comb_cross_field.cpp
  59. 0 22
      python/py_igl/py_comb_frame_field.cpp
  60. 0 36
      python/py_igl/py_compute_frame_field_bisectors.cpp
  61. 0 17
      python/py_igl/py_cotmatrix.cpp
  62. 0 18
      python/py_igl/py_covariance_scatter_matrix.cpp
  63. 0 20
      python/py_igl/py_cross_field_mismatch.cpp
  64. 0 18
      python/py_igl/py_cut_mesh_from_singularities.cpp
  65. 0 43
      python/py_igl/py_deform_skeleton.cpp
  66. 0 19
      python/py_igl/py_directed_edge_orientations.cpp
  67. 0 21
      python/py_igl/py_directed_edge_parents.cpp
  68. 0 61
      python/py_igl/py_doublearea.cpp
  69. 0 28
      python/py_igl/py_dqs.cpp
  70. 0 18
      python/py_igl/py_edge_lengths.cpp
  71. 0 20
      python/py_igl/py_edge_topology.cpp
  72. 0 29
      python/py_igl/py_eigs.cpp
  73. 0 24
      python/py_igl/py_exact_geodesic.cpp
  74. 0 34
      python/py_igl/py_find_cross_field_singularities.cpp
  75. 0 29
      python/py_igl/py_fit_rotations.cpp
  76. 0 16
      python/py_igl/py_floor.cpp
  77. 0 69
      python/py_igl/py_forward_kinematics.cpp
  78. 0 17
      python/py_igl/py_gaussian_curvature.cpp
  79. 0 13
      python/py_igl/py_get_seconds.cpp
  80. 0 17
      python/py_igl/py_grad.cpp
  81. 0 21
      python/py_igl/py_harmonic.cpp
  82. 0 51
      python/py_igl/py_hsv_to_rgb.cpp
  83. 0 41
      python/py_igl/py_internal_angles.cpp
  84. 0 16
      python/py_igl/py_invert_diag.cpp
  85. 0 19
      python/py_igl/py_is_irregular_vertex.cpp
  86. 0 31
      python/py_igl/py_jet.cpp
  87. 0 74
      python/py_igl/py_lbs_matrix.cpp
  88. 0 19
      python/py_igl/py_local_basis.cpp
  89. 0 20
      python/py_igl/py_lscm.cpp
  90. 0 18
      python/py_igl/py_map_vertices_to_circle.cpp
  91. 0 28
      python/py_igl/py_marching_tets.cpp
  92. 0 26
      python/py_igl/py_massmatrix.cpp
  93. 0 80
      python/py_igl/py_min_quad_with_fixed.cpp
  94. 0 19
      python/py_igl/py_normalize_row_lengths.cpp
  95. 0 19
      python/py_igl/py_normalize_row_sums.cpp
  96. 0 65
      python/py_igl/py_parula.cpp
  97. 0 45
      python/py_igl/py_per_corner_normals.cpp
  98. 0 57
      python/py_igl/py_per_edge_normals.cpp
  99. 0 41
      python/py_igl/py_per_face_normals.cpp
  100. 0 62
      python/py_igl/py_per_vertex_normals.cpp

+ 0 - 5
.appveyor.yml

@@ -11,18 +11,13 @@ environment:
   matrix:
   - CONFIG: Debug
     BOOST_ROOT: C:/Libraries/boost_1_65_1
-    PYTHON: 37
   - CONFIG: Release
     BOOST_ROOT: C:/Libraries/boost_1_65_1
-    PYTHON: 37
-install:
-  - cinstall: python
 build:
   parallel: true
 build_script:
   - cd c:\projects\libigl
   # Tutorials and tests
-  - set PATH=C:\Python%PYTHON%-x64;C:\Python%PYTHON%-x64\Scripts;%PATH%
   - mkdir build
   - cd build
   - cmake -DCMAKE_BUILD_TYPE=%CONFIG%

+ 1 - 7
CMakeLists.txt

@@ -9,10 +9,9 @@ else()
 	set(LIBIGL_TOPLEVEL_PROJECT OFF)
 endif()
 
-# Build tests, tutorials and python bindings
+# Build tests and tutorials
 option(LIBIGL_BUILD_TESTS      "Build libigl unit test"        ${LIBIGL_TOPLEVEL_PROJECT})
 option(LIBIGL_BUILD_TUTORIALS  "Build libigl tutorial"         ${LIBIGL_TOPLEVEL_PROJECT})
-option(LIBIGL_BUILD_PYTHON     "Build libigl python bindings"  ${LIBIGL_TOPLEVEL_PROJECT})
 option(LIBIGL_EXPORT_TARGETS   "Export libigl CMake targets"   ${LIBIGL_TOPLEVEL_PROJECT})
 
 # USE_STATIC_LIBRARY speeds up the generation of multiple binaries,
@@ -32,7 +31,6 @@ option(LIBIGL_WITH_TETGEN            "Use Tetgen"                   ON)
 option(LIBIGL_WITH_TRIANGLE          "Use Triangle"                 ON)
 option(LIBIGL_WITH_PREDICATES        "Use exact predicates"         ON)
 option(LIBIGL_WITH_XML               "Use XML"                      ON)
-option(LIBIGL_WITH_PYTHON            "Use Python"                   ${LIBIGL_BUILD_PYTHON})
 ### End
 
 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
@@ -54,7 +52,3 @@ if(LIBIGL_BUILD_TESTS)
 	enable_testing()
 	add_subdirectory(tests)
 endif()
-
-if(LIBIGL_WITH_PYTHON)
-	add_subdirectory(python)
-endif()

+ 1 - 7
cmake/libigl.cmake

@@ -34,7 +34,6 @@ option(LIBIGL_WITH_TETGEN            "Use Tetgen"                   OFF)
 option(LIBIGL_WITH_TRIANGLE          "Use Triangle"                 OFF)
 option(LIBIGL_WITH_PREDICATES        "Use exact predicates"         OFF)
 option(LIBIGL_WITH_XML               "Use XML"                      OFF)
-option(LIBIGL_WITH_PYTHON            "Use Python"                   OFF)
 option(LIBIGL_WITHOUT_COPYLEFT       "Disable Copyleft libraries"   OFF)
 option(LIBIGL_EXPORT_TARGETS         "Export libigl CMake targets"  OFF)
 
@@ -195,7 +194,6 @@ compile_igl_module("core" ${SOURCES_IGL})
 ################################################################################
 ### Download the python part ###
 if(LIBIGL_WITH_PYTHON)
-  igl_download_pybind11()
 endif()
 
 ################################################################################
@@ -211,11 +209,7 @@ if(LIBIGL_WITH_CGAL)
     if(EXISTS ${LIBIGL_EXTERNAL}/boost)
       set(BOOST_ROOT "${LIBIGL_EXTERNAL}/boost")
     endif()
-    if(LIBIGL_WITH_PYTHON)
-      option(CGAL_Boost_USE_STATIC_LIBS "Use static Boost libs with CGAL" OFF)
-    else()
-      option(CGAL_Boost_USE_STATIC_LIBS "Use static Boost libs with CGAL" ON)
-    endif()
+
     find_package(CGAL CONFIG COMPONENTS Core PATHS ${CGAL_DIR} NO_DEFAULT_PATH)
   endif()
 

+ 0 - 165
python/CMakeLists.txt

@@ -1,165 +0,0 @@
-cmake_minimum_required(VERSION 2.8.12)
-project(pyigl)
-
-### Adding libIGL: choose the path to your local copy libIGL
-if(NOT TARGET igl::core)
-  ### Prefer header-only mode for compiling Python bindings
-  if(NOT LIBIGL_WITH_PYTHON OR NOT LIBIGL_USE_STATIC_LIBRARY)
-    message(FATAL_ERROR
-      "Trying to compile Python bindings without -DLIBIGL_WITH_PYTHON=ON. "
-      "Either enable manually all the necessary options, or compile from "
-      "the root folder with -DLIBIGL_USE_STATIC_LIBRARY=OFF")
-  endif()
-  list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/../cmake")
-  include(libigl)
-endif()
-
-# Force a specific python version
-# set(PYTHON_LIBRARIES "D:/Python34/libs/python34.lib")
-# set(PYTHON_INCLUDE_DIR "D:/Python34/include")
-
-# Force a specific python version
-# set(PYTHON_LIBRARIES "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/libpython3.5m.dylib")
-# set(PYTHON_INCLUDE_DIR "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/include/python3.5m")
-
-set(Python_ADDITIONAL_VERSIONS 3.4 3.5 3.6 3.7)
-find_package(PythonInterp 3.4 REQUIRED)
-find_package(PythonLibs 3.4 REQUIRED)
-
-## libigl
-if(NOT TARGET igl::core)
-  list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/../cmake")
-  include(libigl)
-endif()
-
-string(TOUPPER "${CMAKE_BUILD_TYPE}" U_CMAKE_BUILD_TYPE)
-if(UNIX)
-  if(NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -flto")
-  endif()
-endif()
-
-## include pybind
-set(PYBIND11_DIR ${PROJECT_SOURCE_DIR}/../external/pybind11 CACHE PATH "Path to pybind11")
-add_subdirectory(${PYBIND11_DIR} pybind11)
-
-## Prepare the python library
-pybind11_add_module(pyigl
-  python_shared.cpp
-  modules/py_vector.cpp
-  py_igl.cpp
-  py_doc.cpp
-)
-
-## Add dependencies
-target_link_libraries(pyigl PUBLIC igl::core)
-
-## Optional modules
-if(LIBIGL_WITH_OPENGL_GLFW)
-  target_sources(pyigl PRIVATE "modules/py_igl_opengl_glfw.cpp")
-  target_compile_definitions(pyigl PUBLIC -DPY_GLFW)
-  target_link_libraries(pyigl PUBLIC igl::opengl igl::opengl_glfw)
-endif()
-
-if(LIBIGL_WITH_COMISO)
-  target_sources(pyigl PRIVATE "modules/copyleft/py_igl_comiso.cpp")
-  target_compile_definitions(pyigl PUBLIC -DPY_COMISO)
-  target_link_libraries(pyigl PUBLIC igl::comiso)
-endif()
-
-if(LIBIGL_WITH_TETGEN)
-  target_sources(pyigl PRIVATE "modules/copyleft/py_igl_tetgen.cpp")
-  target_compile_definitions(pyigl PUBLIC -DPY_TETGEN)
-  target_link_libraries(pyigl PUBLIC igl::tetgen)
-endif()
-
-if(LIBIGL_WITH_EMBREE)
-  target_sources(pyigl PRIVATE "modules/py_igl_embree.cpp")
-  target_compile_definitions(pyigl PUBLIC -DPY_EMBREE)
-  target_link_libraries(pyigl PUBLIC igl::embree)
-endif()
-
-if(LIBIGL_WITH_TRIANGLE)
-  target_sources(pyigl PRIVATE "modules/py_igl_triangle.cpp")
-  target_compile_definitions(pyigl PUBLIC -DPY_TRIANGLE)
-  target_link_libraries(pyigl PUBLIC igl::triangle)
-endif()
-
-if(LIBIGL_WITH_CGAL)
-  target_sources(pyigl PRIVATE "modules/copyleft/py_igl_cgal.cpp")
-  target_compile_definitions(pyigl PUBLIC -DPY_CGAL)
-  target_link_libraries(pyigl PUBLIC igl::cgal)
-endif()
-
-if(NOT LIBIGL_WITHOUT_COPYLEFT)
-  target_sources(pyigl PRIVATE "modules/copyleft/py_igl_copyleft.cpp")
-  target_compile_definitions(pyigl PUBLIC -DPY_COPYLEFT)
-endif()
-
-if(LIBIGL_WITH_PNG)
-  target_sources(pyigl PRIVATE "modules/py_igl_png.cpp")
-  target_compile_definitions(pyigl PUBLIC -DPY_PNG)
-  target_link_libraries(pyigl PUBLIC igl::png)
-endif()
-
-set_target_properties(pyigl PROPERTIES PREFIX "")
-set_target_properties(pyigl PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
-
-if(WIN32)
-  if(MSVC)
-    # Enforce size-based optimization and link time code generation on MSVC (~30% smaller binaries in experiments)
-    set_target_properties(pyigl PROPERTIES COMPILE_FLAGS "/Os /GL")
-    set_target_properties(pyigl PROPERTIES LINK_FLAGS "/LTCG")
-  endif()
-
-  # .PYD file extension on Windows
-  set_target_properties(pyigl PROPERTIES SUFFIX ".pyd")
-
-  # Link against the Python shared library
-  # message(FATAL_ERROR ${PYTHON_LIBRARY})
-  # target_link_libraries(igl ${PYTHON_LIBRARY})
-  target_link_libraries(pyigl PRIVATE ${PYTHON_LIBRARIES})
-
-elseif(UNIX)
-  # It's quite common to have multiple copies of the same Python version
-  # installed on one's system. E.g.: one copy from the OS and another copy
-  # that's statically linked into an application like Blender or Maya.
-  # If we link our plugin library against the OS Python here and import it
-  # into Blender or Maya later on, this will cause segfaults when multiple
-  # conflicting Python instances are active at the same time.
-
-  # Windows does not seem to be affected by this issue. The solution for Linux
-  # and Mac OS is simple: we just don't link against the Python library. The
-  # resulting shared library will have missing symbols, but that's perfectly
-  # fine -- they will be resolved at import time.
-
-  # .SO file extension on Linux/Mac OS
-  set_target_properties(pyigl PROPERTIES SUFFIX ".so")
-
-  # Enable flag if undefined symbols appear on pyigl module import to get notified about the missing symbols at link time
-  option(LIBIGL_CHECK_UNDEFINED        "Check for undefined symbols"    OFF)
-
-  # Strip unnecessary sections of the binary on Linux/Mac OS
-  if(APPLE)
-    set_target_properties(pyigl PROPERTIES MACOSX_RPATH ".")
-
-    if(NOT LIBIGL_CHECK_UNDEFINED)
-      set_target_properties(pyigl PROPERTIES LINK_FLAGS "-undefined dynamic_lookup -dead_strip")
-    endif()
-
-    if(NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG)
-      add_custom_command(TARGET pyigl POST_BUILD COMMAND strip -u -r ${PROJECT_SOURCE_DIR}/pyigl.so)
-    endif()
-  else()
-
-    if(LIBIGL_CHECK_UNDEFINED)
-      target_link_libraries(pyigl PRIVATE ${PYTHON_LIBRARIES})
-      set_target_properties(pyigl PROPERTIES LINK_FLAGS "-Wl,--no-undefined")
-    endif()
-
-    if(NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG)
-      add_custom_command(TARGET pyigl POST_BUILD COMMAND strip ${PROJECT_SOURCE_DIR}/pyigl.so)
-    endif()
-  endif()
-endif()
-

+ 0 - 64
python/iglhelpers.py

@@ -1,64 +0,0 @@
-# This file is part of libigl, a simple c++ geometry processing library.
-#
-# Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-#
-# This Source Code Form is subject to the terms of the Mozilla Public License
-# v. 2.0. If a copy of the MPL was not distributed with this file, You can
-# obtain one at http://mozilla.org/MPL/2.0/.
-import numpy as np
-import scipy.sparse as sparse
-import pyigl as igl
-
-def p2e(m):
-    if isinstance(m, np.ndarray):
-        if not (m.flags['C_CONTIGUOUS'] or m.flags['F_CONTIGUOUS']):
-            raise TypeError('p2e support either c-order or f-order')
-        if m.dtype.type in [np.int32, np.int64]:
-            return igl.eigen.MatrixXi(m.astype(np.int32))
-        elif m.dtype.type in [np.float64, np.float32]:
-            return igl.eigen.MatrixXd(m.astype(np.float64))
-        elif m.dtype.type == np.bool:
-            return igl.eigen.MatrixXb(m)
-        raise TypeError("p2e only support dtype float64/32, int64/32 and bool")
-    if sparse.issparse(m):
-        # convert in a dense matrix with triples
-        coo = m.tocoo()
-        triplets = np.vstack((coo.row, coo.col, coo.data)).T
-
-        triples_eigen_wrapper = igl.eigen.MatrixXd(triplets)
-
-        if m.dtype.type == np.int32:
-            t = igl.eigen.SparseMatrixi()
-            t.fromcoo(triples_eigen_wrapper)
-            return t
-        elif m.dtype.type == np.float64:
-            t = igl.eigen.SparseMatrixd()
-            t.fromCOO(triples_eigen_wrapper)
-            return t
-
-
-    raise TypeError("p2e only support numpy.array or scipy.sparse")
-
-
-def e2p(m):
-    if isinstance(m, igl.eigen.MatrixXd):
-        return np.array(m, dtype='float64', order='C')
-    elif isinstance(m, igl.eigen.MatrixXi):
-        return np.array(m, dtype='int32', order='C')
-    elif isinstance(m, igl.eigen.MatrixXb):
-        return np.array(m, dtype='bool', order='C')
-    elif isinstance(m, igl.eigen.SparseMatrixd):
-        coo = np.array(m.toCOO())
-        I = coo[:, 0]
-        J = coo[:, 1]
-        V = coo[:, 2]
-        return sparse.coo_matrix((V,(I,J)), shape=(m.rows(),m.cols()), dtype='float64')
-    elif isinstance(m, igl.eigen.SparseMatrixi):
-        coo = np.array(m.toCOO())
-        I = coo[:, 0]
-        J = coo[:, 1]
-        V = coo[:, 2]
-        return sparse.coo_matrix((V,(I,J)), shape=(m.rows(),m.cols()), dtype='int32')
-
-def printMatrixSizes(x,xn):
-    print(xn + " (" + str(x.rows()) + "," + str(x.cols()) + ")")

+ 0 - 18
python/matlab/example1.m

@@ -1,18 +0,0 @@
-%% Launch the external viewer
-launch_viewer;
-
-%% Load a mesh in OFF format
-V = py.igl.eigen.MatrixXd();
-F = py.igl.eigen.MatrixXi();
-py.igl.readOFF('../tutorial/shared/beetle.off', V, F);
-
-%% Scale the x coordinate in matlab
-V = p2m(V);
-V(:,1) = V(:,1) * 2;
-V = m2p(V);
-
-%% Plot the mesh
-viewer = py.tcpviewer_single.TCPViewer();
-viewer.data.set_mesh(V, F);
-viewer.launch();
-

+ 0 - 60
python/matlab/example2.m

@@ -1,60 +0,0 @@
-% Launch the external viewer
-launch_viewer;
-
-V = py.igl.eigen.MatrixXd();
-F = py.igl.eigen.MatrixXi();
-py.igl.read_triangle_mesh('../tutorial/shared/fertility.off', V, F);
-
-% Alternative discrete mean curvature
-HN = py.igl.eigen.MatrixXd();
-L = py.igl.eigen.SparseMatrixd();
-M = py.igl.eigen.SparseMatrixd();
-Minv = py.igl.eigen.SparseMatrixd();
-
-
-py.igl.cotmatrix(V,F,L);
-py.igl.massmatrix(V,F,py.igl.MASSMATRIX_TYPE_VORONOI,M);
-
-py.igl.invert_diag(M,Minv);
-
-% Laplace-Beltrami of position
-HN = -Minv*(L*V);
-
-% Extract magnitude as mean curvature
-H = HN.rowwiseNorm();
-
-% Compute curvature directions via quadric fitting
-PD1 = py.igl.eigen.MatrixXd();
-PD2 = py.igl.eigen.MatrixXd();
-
-PV1 = py.igl.eigen.MatrixXd();
-PV2 = py.igl.eigen.MatrixXd();
-
-py.igl.principal_curvature(V,F,PD1,PD2,PV1,PV2);
-
-% Mean curvature
-H = 0.5*(PV1+PV2);
-
-viewer = py.tcpviewer_single.TCPViewer();
-viewer.data.set_mesh(V, F);
-
-% Compute pseudocolor
-C = py.igl.eigen.MatrixXd();
-py.igl.parula(H,true,C);
-
-viewer.data.set_colors(C);
-
-% Average edge length for sizing
-avg = py.igl.avg_edge_length(V,F);
-
-% Draw a blue segment parallel to the minimal curvature direction
-red  = m2p([0.8,0.2,0.2]);
-blue = m2p([0.2,0.2,0.8]);
-
-viewer.data.add_edges(V + PD1*avg, V - PD1*avg, blue);
-
-% Draw a red segment parallel to the maximal curvature direction
-viewer.data.add_edges(V + PD2*avg, V - PD2*avg, red);
-
-% Plot
-viewer.launch()

+ 0 - 3
python/matlab/launch_viewer.m

@@ -1,3 +0,0 @@
-system('python tcpviewer_single.py&');
-
-pause(0.1) % Wait a bit for the viewer to start

+ 0 - 19
python/matlab/m2p.m

@@ -1,19 +0,0 @@
-% Converts a Matlab matrix to a python-wrapped Eigen Matrix
-function [ P ] = m2p( M )
-    if (isa(M, 'double'))
-        % Convert the matrix to a python 1D array
-        a = py.array.array('d',reshape(M,1,numel(M)));
-        % Then convert it to a eigen type
-        t = py.igl.eigen.MatrixXd(a.tolist());
-        % Finally reshape it back
-        P = t.MapMatrix(uint16(size(M,1)),uint16(size(M,2)));
-    elseif (isa(M, 'integer'))
-        % Convert the matrix to a python 1D array
-        a = py.array.array('i',reshape(M,1,numel(M)));
-        % Then convert it to a eigen type
-        t = py.igl.eigen.MatrixXi(a.tolist());
-        % Finally reshape it back
-        P = t.MapMatrix(uint16(size(M,1)),uint16(size(M,2)));
-    else
-        error('Unsupported numerical type.');
-    end

+ 0 - 17
python/matlab/p2m.m

@@ -1,17 +0,0 @@
-% Converts a python-wrapped Eigen Matrix to a Matlab matrix
-function [ M ] = p2m( P )
-    if py.repr(py.type(P)) == '<class ''igl.eigen.MatrixXd''>'
-        % Convert it to a python array first
-        t = py.array.array('d',P);
-        % Reshape it
-        M = reshape(double(t),P.rows(),P.cols());
-    elseif py.repr(py.type(P)) == '<class ''igl.eigen.MatrixXi''>'
-        % Convert it to a python array first
-        t = py.array.array('i',P);
-        % Reshape it
-        M = reshape(int32(t),P.rows(),P.cols());
-    else
-        error('Unsupported numerical type.');
-    end
-end
-

+ 0 - 29
python/modules/copyleft/py_igl_cgal.cpp

@@ -1,29 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-//#include <Eigen/Geometry>
-//#include <Eigen/Dense>
-//#include <Eigen/Sparse>
-
-
-#include "../../python_shared.h"
-
-#include <igl/copyleft/cgal/mesh_boolean.h>
-#include <igl/copyleft/cgal/remesh_self_intersections.h>
-#include <igl/copyleft/cgal/RemeshSelfIntersectionsParam.h>
-
-
-void python_export_igl_cgal(py::module &me) {
-
-  py::module m = me.def_submodule(
-    "cgal", "Wrappers for libigl functions that use cgal");
-
-  #include "../../py_igl/copyleft/cgal/py_mesh_boolean.cpp"
-  #include "../../py_igl/copyleft/cgal/py_remesh_self_intersections.cpp"
-  #include "../../py_igl/copyleft/cgal/py_RemeshSelfIntersectionsParam.cpp"
-
-}

+ 0 - 26
python/modules/copyleft/py_igl_comiso.cpp

@@ -1,26 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-#include <Eigen/Geometry>
-#include <Eigen/Dense>
-#include <Eigen/Sparse>
-
-
-#include "../../python_shared.h"
-
-#include <igl/copyleft/comiso/nrosy.h>
-#include <igl/copyleft/comiso/miq.h>
-
-void python_export_igl_comiso(py::module &me) {
-
-  py::module m = me.def_submodule(
-    "comiso", "Wrappers for libigl functions that use comiso");
-
-  #include "../../py_igl/copyleft/comiso/py_nrosy.cpp"
-  #include "../../py_igl/copyleft/comiso/py_miq.cpp"
-
-}

+ 0 - 27
python/modules/copyleft/py_igl_copyleft.cpp

@@ -1,27 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-//#include <Eigen/Geometry>
-//#include <Eigen/Dense>
-//#include <Eigen/Sparse>
-
-
-#include "../../python_shared.h"
-
-#include <igl/copyleft/marching_cubes.h>
-#include <igl/copyleft/swept_volume.h>
-
-
-void python_export_igl_copyleft(py::module &me) {
-
-  py::module m = me.def_submodule(
-    "copyleft", "Wrappers for libigl functions that are copyleft");
-
-  #include "../../py_igl/copyleft/py_marching_cubes.cpp"
-  #include "../../py_igl/copyleft/py_swept_volume.cpp"
-
-}

+ 0 - 25
python/modules/copyleft/py_igl_tetgen.cpp

@@ -1,25 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-//#include <Eigen/Geometry>
-//#include <Eigen/Dense>
-//#include <Eigen/Sparse>
-
-
-#include "../../python_shared.h"
-
-#include <igl/copyleft/tetgen/tetrahedralize.h>
-
-
-void python_export_igl_tetgen(py::module &me) {
-
-  py::module m = me.def_submodule(
-    "tetgen", "Wrappers for libigl functions that use tetgen");
-
-  #include "../../py_igl/copyleft/tetgen/py_tetrahedralize.cpp"
-
-}

+ 0 - 29
python/modules/py_igl_embree.cpp

@@ -1,29 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-//#include <Eigen/Geometry>
-//#include <Eigen/Dense>
-//#include <Eigen/Sparse>
-
-
-#include "../python_shared.h"
-
-#include <igl/embree/ambient_occlusion.h>
-#include <igl/embree/reorient_facets_raycast.h>
-#include <igl/embree/line_mesh_intersection.h>
-
-
-void python_export_igl_embree(py::module &me) {
-
-  py::module m = me.def_submodule(
-    "embree", "Wrappers for libigl functions that use embree");
-
-  #include "../py_igl/embree/py_ambient_occlusion.cpp"
-  #include "../py_igl/embree/py_reorient_facets_raycast.cpp"
-  #include "../py_igl/embree/py_line_mesh_intersection.cpp"
-
-}

+ 0 - 453
python/modules/py_igl_opengl_glfw.cpp

@@ -1,453 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-#include <Eigen/Dense>
-#include <Eigen/Sparse>
-
-#include "../python_shared.h"
-#include <igl/opengl/glfw/Viewer.h>
-#include <igl/opengl/ViewerCore.h>
-#include <igl/opengl/ViewerData.h>
-#include <igl/opengl/MeshGL.h>
-#include <igl/serialize.h>
-#ifdef IGL_VIEWER_WITH_NANOGUI
-#include "../../../external/nanogui/include/nanogui/formhelper.h"
-#include "../../../external/nanogui/include/nanogui/screen.h"
-#endif
-
-void python_export_igl_glfw(py::module &m)
-{
-
-  py::module me = m.def_submodule(
-    "glfw", "GLFW Mesh viewer");
-
-/////////////////////// DATA
-
-py::class_<igl::opengl::ViewerData> viewerdata_class(me, "ViewerData");
-
-py::enum_<igl::opengl::MeshGL::DirtyFlags>(viewerdata_class, "DirtyFlags")
-    .value("DIRTY_NONE", igl::opengl::MeshGL::DIRTY_NONE)
-    .value("DIRTY_POSITION", igl::opengl::MeshGL::DIRTY_POSITION)
-    .value("DIRTY_UV", igl::opengl::MeshGL::DIRTY_UV)
-    .value("DIRTY_NORMAL", igl::opengl::MeshGL::DIRTY_NORMAL)
-    .value("DIRTY_AMBIENT", igl::opengl::MeshGL::DIRTY_AMBIENT)
-    .value("DIRTY_DIFFUSE", igl::opengl::MeshGL::DIRTY_DIFFUSE)
-    .value("DIRTY_SPECULAR", igl::opengl::MeshGL::DIRTY_SPECULAR)
-    .value("DIRTY_TEXTURE", igl::opengl::MeshGL::DIRTY_TEXTURE)
-    .value("DIRTY_FACE", igl::opengl::MeshGL::DIRTY_FACE)
-    .value("DIRTY_MESH", igl::opengl::MeshGL::DIRTY_MESH)
-    .value("DIRTY_OVERLAY_LINES", igl::opengl::MeshGL::DIRTY_OVERLAY_LINES)
-    .value("DIRTY_OVERLAY_POINTS", igl::opengl::MeshGL::DIRTY_OVERLAY_POINTS)
-    .value("DIRTY_ALL", igl::opengl::MeshGL::DIRTY_ALL)
-    .export_values();
-
-
-    viewerdata_class
-    .def(py::init<>())
-    .def("set_mesh", &igl::opengl::ViewerData::set_mesh)
-    .def("set_colors", &igl::opengl::ViewerData::set_colors)
-    .def("clear", &igl::opengl::ViewerData::clear)
-    .def("set_face_based", &igl::opengl::ViewerData::set_face_based)
-
-    .def("set_vertices", &igl::opengl::ViewerData::set_vertices)
-    .def("set_normals", &igl::opengl::ViewerData::set_normals)
-
-    .def("set_uv",
-       (void (igl::opengl::ViewerData::*) (const Eigen::MatrixXd &)) &igl::opengl::ViewerData::set_uv
-    )
-
-    .def("set_uv",
-       (void (igl::opengl::ViewerData::*) (const Eigen::MatrixXd &, const Eigen::MatrixXi&)) &igl::opengl::ViewerData::set_uv
-    )
-
-    .def("set_texture",
-       (void (igl::opengl::ViewerData::*) (
-         const Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic>&,
-         const Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic>&,
-         const Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic>&)
-       ) &igl::opengl::ViewerData::set_texture
-    )
-
-    .def("set_texture",
-       (void (igl::opengl::ViewerData::*) (
-         const Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic>&,
-         const Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic>&,
-         const Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic>&,
-         const Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic>&)
-       ) &igl::opengl::ViewerData::set_texture
-    )
-
-    .def("set_points", &igl::opengl::ViewerData::set_points)
-    .def("add_points", &igl::opengl::ViewerData::add_points)
-    .def("set_edges", &igl::opengl::ViewerData::set_edges)
-    .def("add_edges", &igl::opengl::ViewerData::add_edges)
-
-    .def("add_label", [] (igl::opengl::ViewerData& data, const Eigen::MatrixXd& P,  const std::string& str)
-    {
-      assert_is_VectorX("P",P);
-      data.add_label(P,str);
-    })
-
-    .def("compute_normals", &igl::opengl::ViewerData::compute_normals)
-
-    .def("uniform_colors", [] (igl::opengl::ViewerData& data, const Eigen::MatrixXd& ambient, const Eigen::MatrixXd& diffuse, const Eigen::MatrixXd& specular)
-    {
-      if (ambient.cols() == 3)
-      {
-        assert_is_Vector3("ambient",ambient);
-        assert_is_Vector3("diffuse",diffuse);
-        assert_is_Vector3("specular",specular);
-        Eigen::Vector3d vambient = ambient;
-        Eigen::Vector3d vdiffuse = diffuse;
-        Eigen::Vector3d vspecular = specular;
-        data.uniform_colors(vambient,vdiffuse, vspecular);
-      }
-
-      if (ambient.cols() == 4)
-      {
-        assert_is_Vector4("ambient",ambient);
-        assert_is_Vector4("diffuse",diffuse);
-        assert_is_Vector4("specular",specular);
-        Eigen::Vector4d vambient = ambient;
-        Eigen::Vector4d vdiffuse = diffuse;
-        Eigen::Vector4d vspecular = specular;
-        data.uniform_colors(vambient,vdiffuse,vspecular);
-      }
-
-    })
-
-    .def("grid_texture", &igl::opengl::ViewerData::grid_texture)
-
-    .def_readwrite("V", &igl::opengl::ViewerData::V)
-    .def_readwrite("F", &igl::opengl::ViewerData::F)
-
-    .def_readwrite("F_normals", &igl::opengl::ViewerData::F_normals)
-    .def_readwrite("F_material_ambient", &igl::opengl::ViewerData::F_material_ambient)
-    .def_readwrite("F_material_diffuse", &igl::opengl::ViewerData::F_material_diffuse)
-    .def_readwrite("F_material_specular", &igl::opengl::ViewerData::F_material_specular)
-
-    .def_readwrite("V_normals", &igl::opengl::ViewerData::V_normals)
-    .def_readwrite("V_material_ambient", &igl::opengl::ViewerData::V_material_ambient)
-    .def_readwrite("V_material_diffuse", &igl::opengl::ViewerData::V_material_diffuse)
-    .def_readwrite("V_material_specular", &igl::opengl::ViewerData::V_material_specular)
-
-    .def_readwrite("V_uv", &igl::opengl::ViewerData::V_uv)
-    .def_readwrite("F_uv", &igl::opengl::ViewerData::F_uv)
-
-    .def_readwrite("texture_R", &igl::opengl::ViewerData::texture_R)
-    .def_readwrite("texture_G", &igl::opengl::ViewerData::texture_G)
-    .def_readwrite("texture_B", &igl::opengl::ViewerData::texture_B)
-
-    .def_readwrite("lines", &igl::opengl::ViewerData::lines)
-    .def_readwrite("points", &igl::opengl::ViewerData::points)
-    .def_readwrite("labels_positions", &igl::opengl::ViewerData::labels_positions)
-    .def_readwrite("labels_strings", &igl::opengl::ViewerData::labels_strings)
-    // .def_readwrite("dirty", &igl::opengl::MeshGL::dirty)
-    .def_readwrite("face_based", &igl::opengl::ViewerData::face_based)
-    .def("serialize", [](igl::opengl::ViewerData& data)
-    {
-      std::vector<char> a;
-      igl::serialize(data,"Data",a);
-      return a;
-    })
-
-    .def("deserialize", [](igl::opengl::ViewerData& data, const std::vector<char>& a)
-    {
-      igl::deserialize(data,"Data",a);
-      return;
-    })
-
-    .def_readwrite("shininess",&igl::opengl::ViewerData::shininess)
-
-    .def_property("line_color",
-    [](const igl::opengl::ViewerData& data) {return Eigen::MatrixXd(data.line_color.cast<double>());},
-    [](igl::opengl::ViewerData& data, const Eigen::MatrixXd& v)
-    {
-      assert_is_Vector4("line_color",v);
-      data.line_color = Eigen::Vector4f(v.cast<float>());
-    })
-
-    .def_readwrite("show_overlay",&igl::opengl::ViewerData::show_overlay)
-    .def_readwrite("show_overlay_depth",&igl::opengl::ViewerData::show_overlay_depth)
-    .def_readwrite("show_texture",&igl::opengl::ViewerData::show_texture)
-    .def_readwrite("show_faces",&igl::opengl::ViewerData::show_faces)
-
-    .def_readwrite("show_lines",&igl::opengl::ViewerData::show_lines)
-    .def_readwrite("show_vertid",&igl::opengl::ViewerData::show_vertid)
-    .def_readwrite("show_faceid",&igl::opengl::ViewerData::show_faceid)
-    .def_readwrite("invert_normals",&igl::opengl::ViewerData::invert_normals)
-
-    .def_readwrite("point_size",&igl::opengl::ViewerData::point_size)
-    .def_readwrite("line_width",&igl::opengl::ViewerData::line_width)
-
-    ;
-
-//////////////////////// OPENGL_State
-
-// py::class_<igl::opengl::State> opengl_state_class(me, "OpenGL_state");
-
-//     opengl_state_class
-//     .def(py::init<>())
-//     .def("init", &igl::opengl::State::init)
-
-//     ;
-
-//////////////////////// CORE
-
-py::class_<igl::opengl::ViewerCore> viewercore_class(me, "ViewerCore");
-
-    py::enum_<igl::opengl::ViewerCore::RotationType>(viewercore_class, "RotationType")
-        .value("ROTATION_TYPE_TRACKBALL", igl::opengl::ViewerCore::ROTATION_TYPE_TRACKBALL)
-        .value("ROTATION_TYPE_TWO_AXIS_VALUATOR_FIXED_UP", igl::opengl::ViewerCore::ROTATION_TYPE_TWO_AXIS_VALUATOR_FIXED_UP)
-        .value("NUM_ROTATION_TYPES", igl::opengl::ViewerCore::NUM_ROTATION_TYPES)
-        .export_values();
-
-    viewercore_class
-    .def(py::init<>())
-    //.def("align_camera_center", [](igl::opengl::ViewerCore& core, const Eigen::MatrixXd& V, const Eigen::MatrixXi& F){return core.align_camera_center(V,F);})
-    .def("init", &igl::opengl::ViewerCore::init)
-    .def("shut", &igl::opengl::ViewerCore::shut)
-    //.def("InitSerialization", &igl::opengl::ViewerCore::InitSerialization)
-    .def("align_camera_center",
-       (void (igl::opengl::ViewerCore::*) (const Eigen::MatrixXd &, const Eigen::MatrixXi &)) &igl::opengl::ViewerCore::align_camera_center
-    )
-
-    .def("align_camera_center",
-       (void (igl::opengl::ViewerCore::*) (const Eigen::MatrixXd &)) &igl::opengl::ViewerCore::align_camera_center
-    )
-
-    .def("clear_framebuffers",&igl::opengl::ViewerCore::clear_framebuffers)
-    .def("draw",&igl::opengl::ViewerCore::draw)
-    .def("draw_buffer",&igl::opengl::ViewerCore::draw_buffer)
-
-    .def_property("background_color",
-    [](const igl::opengl::ViewerCore& core) {return Eigen::MatrixXd(core.background_color.cast<double>());},
-    [](igl::opengl::ViewerCore& core, const Eigen::MatrixXd& v)
-    {
-      assert_is_Vector4("background_color",v);
-      core.background_color << Eigen::Vector4f(v.cast<float>());
-    })
-
-    .def_property("light_position",
-    [](const igl::opengl::ViewerCore& core) {return Eigen::MatrixXd(core.light_position.cast<double>());},
-    [](igl::opengl::ViewerCore& core, const Eigen::MatrixXd& v)
-    {
-      assert_is_Vector3("light_position",v);
-      core.light_position = Eigen::Vector3f(v.cast<float>());
-    })
-
-    .def_readwrite("lighting_factor",&igl::opengl::ViewerCore::lighting_factor)
-
-    .def_property("trackball_angle",
-    [](const igl::opengl::ViewerCore& core) {return Eigen::Quaterniond(core.trackball_angle.cast<double>());},
-    [](igl::opengl::ViewerCore& core, const Eigen::Quaterniond& q)
-    {
-      core.trackball_angle = Eigen::Quaternionf(q.cast<float>());
-    })
-
-    .def_property("camera_base_translation",
-    [](const igl::opengl::ViewerCore& core) {return Eigen::MatrixXd(core.camera_base_translation.cast<double>());},
-    [](igl::opengl::ViewerCore& core, const Eigen::MatrixXd& v)
-    {
-      assert_is_Vector3("camera_base_translation",v);
-      core.camera_base_translation = Eigen::Vector3f(v.cast<float>());
-    })
-
-    .def_property("camera_translation",
-    [](const igl::opengl::ViewerCore& core) {return Eigen::MatrixXd(core.camera_translation.cast<double>());},
-    [](igl::opengl::ViewerCore& core, const Eigen::MatrixXd& v)
-    {
-      assert_is_Vector3("camera_translation",v);
-      core.camera_translation = Eigen::Vector3f(v.cast<float>());
-    })
-
-    .def_readwrite("camera_base_zoom",&igl::opengl::ViewerCore::camera_base_zoom)
-    .def_readwrite("camera_zoom",&igl::opengl::ViewerCore::camera_zoom)
-    .def_readwrite("orthographic",&igl::opengl::ViewerCore::orthographic)
-
-    .def_property("camera_eye",
-    [](const igl::opengl::ViewerCore& core) {return Eigen::MatrixXd(core.camera_eye.cast<double>());},
-    [](igl::opengl::ViewerCore& core, const Eigen::MatrixXd& v)
-    {
-      assert_is_Vector3("camera_eye",v);
-      core.camera_eye = Eigen::Vector3f(v.cast<float>());
-    })
-
-    .def_property("camera_up",
-    [](const igl::opengl::ViewerCore& core) {return Eigen::MatrixXd(core.camera_up.cast<double>());},
-    [](igl::opengl::ViewerCore& core, const Eigen::MatrixXd& v)
-    {
-      assert_is_Vector3("camera_up",v);
-      core.camera_up = Eigen::Vector3f(v.cast<float>());
-    })
-
-    .def_property("camera_center",
-    [](const igl::opengl::ViewerCore& core) {return Eigen::MatrixXd(core.camera_center.cast<double>());},
-    [](igl::opengl::ViewerCore& core, const Eigen::MatrixXd& v)
-    {
-      assert_is_Vector3("camera_center",v);
-      core.camera_center = Eigen::Vector3f(v.cast<float>());
-    })
-
-    .def_readwrite("camera_view_angle",&igl::opengl::ViewerCore::camera_view_angle)
-
-    .def_readwrite("camera_dnear",&igl::opengl::ViewerCore::camera_dnear)
-    .def_readwrite("camera_dfar",&igl::opengl::ViewerCore::camera_dfar)
-
-    .def_readwrite("depth_test",&igl::opengl::ViewerCore::depth_test)
-
-    .def_readwrite("is_animating",&igl::opengl::ViewerCore::is_animating)
-    .def_readwrite("animation_max_fps",&igl::opengl::ViewerCore::animation_max_fps)
-
-    .def_readwrite("object_scale",&igl::opengl::ViewerCore::object_scale)
-
-    .def_property("viewport",
-    [](const igl::opengl::ViewerCore& core) {return Eigen::MatrixXd(core.viewport.cast<double>());},
-    [](igl::opengl::ViewerCore& core, const Eigen::MatrixXd& v)
-    {
-      assert_is_Vector4("viewport",v);
-      core.viewport = Eigen::Vector4f(v.cast<float>());
-    })
-
-    .def_property("view",
-    [](const igl::opengl::ViewerCore& core) {return Eigen::MatrixXd(core.view.cast<double>());},
-    [](igl::opengl::ViewerCore& core, const Eigen::MatrixXd& v)
-    {
-      assert_is_Matrix4("view",v);
-      core.view = Eigen::Matrix4f(v.cast<float>());
-    })
-
-    .def_property("proj",
-    [](const igl::opengl::ViewerCore& core) {return Eigen::MatrixXd(core.proj.cast<double>());},
-    [](igl::opengl::ViewerCore& core, const Eigen::MatrixXd& v)
-    {
-      assert_is_Matrix4("proj",v);
-      core.proj = Eigen::Matrix4f(v.cast<float>());
-    })
-
-    .def_readwrite("rotation_type",&igl::opengl::ViewerCore::rotation_type)
-
-    .def("serialize", [](igl::opengl::ViewerCore& core)
-    {
-      std::vector<char> a;
-      igl::serialize(core,"Core",a);
-      return a;
-    })
-
-    .def("deserialize", [](igl::opengl::ViewerCore& core, const std::vector<char>& a)
-    {
-      igl::deserialize(core,"Core",a);
-      return;
-    })
-
-    // TODO: wrap this!
-    // Eigen::Quaternionf trackball_angle;
-    ;
-
-///////////////////////// VIEWER
-
-// UI Enumerations
-    py::class_<igl::opengl::glfw::Viewer> viewer_class(me, "Viewer");
-
-    py::enum_<igl::opengl::glfw::Viewer::MouseButton>(viewer_class, "MouseButton")
-        .value("Left", igl::opengl::glfw::Viewer::MouseButton::Left)
-        .value("Middle", igl::opengl::glfw::Viewer::MouseButton::Middle)
-        .value("Right", igl::opengl::glfw::Viewer::MouseButton::Right)
-        .export_values();
-
-    viewer_class
-    .def(py::init<>())
-    //.def_readwrite("data", &igl::opengl::glfw::Viewer::data)
-
-    // .def_property("data",
-    // [](igl::opengl::glfw::Viewer& viewer) {return viewer.data();},
-    // [](igl::opengl::glfw::Viewer& viewer, const igl::opengl::ViewerData& data)
-    // {
-    //   viewer.data() = data;
-    // })
-
-    .def("data", (igl::opengl::ViewerData & (igl::opengl::glfw::Viewer::*)(int)) &igl::opengl::glfw::Viewer::data, pybind11::return_value_policy::reference, py::arg("mesh_id")=-1)
-    // .def("data", (const igl::opengl::ViewerData & (igl::opengl::glfw::Viewer::*)(int) const) &igl::opengl::glfw::Viewer::data,pybind11::return_value_policy::reference)
-
-    .def("core", (igl::opengl::ViewerCore & (igl::opengl::glfw::Viewer::*)(unsigned)) &igl::opengl::glfw::Viewer::core, pybind11::return_value_policy::reference, py::arg("core_id")=0)
-    //.def_readwrite("core", &igl::opengl::glfw::Viewer::core)
-    //.def_readwrite("opengl", &igl::opengl::glfw::Viewer::opengl)
-
-    .def("launch", &igl::opengl::glfw::Viewer::launch, py::arg("resizable") = true,
-      py::arg("fullscreen") = false, py::arg("name") = "libigl viewer",
-      py::arg("windowWidth") = 1280, py::arg("windowHeight") = 800)
-    .def("launch_init", &igl::opengl::glfw::Viewer::launch_init, py::arg("resizable") = true,
-      py::arg("fullscreen") = false, py::arg("name") = "libigl viewer",
-      py::arg("windowWidth") = 1280, py::arg("windowHeight") = 800)
-    .def("launch_rendering", &igl::opengl::glfw::Viewer::launch_rendering, py::arg("loop") = true)
-    .def("launch_shut", &igl::opengl::glfw::Viewer::launch_shut)
-    .def("init", &igl::opengl::glfw::Viewer::init)
-    .def("serialize", [](igl::opengl::glfw::Viewer& viewer)
-    {
-      std::vector<char> a;
-      //igl::serialize(viewer.core,"Core",a);
-      //igl::serialize(viewer.data,"Data",a); TODO
-
-      return a;
-    })
-
-    .def("deserialize", [](igl::opengl::glfw::Viewer& viewer, const std::vector<char>& a)
-    {
-      //igl::deserialize(viewer.core,"Core",a);
-      //igl::deserialize(viewer.data,"Data",a);
-      return;
-    })
-
-    // Scene IO
-    .def("load_scene", [](igl::opengl::glfw::Viewer& viewer)
-    {
-      viewer.load_scene();
-    })
-
-    .def("load_scene", [](igl::opengl::glfw::Viewer& viewer, std::string str)
-    {
-      viewer.load_scene(str);
-    })
-
-    .def("save_scene", [](igl::opengl::glfw::Viewer& viewer)
-    {
-      viewer.save_scene();
-    })
-
-    .def("save_scene", [](igl::opengl::glfw::Viewer& viewer, std::string str)
-    {
-      viewer.save_scene(str);
-    })
-
-    // Draw everything
-    .def("draw", &igl::opengl::glfw::Viewer::draw)
-
-    // OpenGL context resize
-    .def("resize", &igl::opengl::glfw::Viewer::resize)
-
-    // Helper functions
-    .def("snap_to_canonical_quaternion", &igl::opengl::glfw::Viewer::snap_to_canonical_quaternion)
-    .def("open_dialog_load_mesh", &igl::opengl::glfw::Viewer::open_dialog_load_mesh)
-    .def("open_dialog_save_mesh", &igl::opengl::glfw::Viewer::open_dialog_save_mesh)
-
-    // Input handling
-    .def_readwrite("current_mouse_x", &igl::opengl::glfw::Viewer::current_mouse_x)
-    .def_readwrite("current_mouse_y", &igl::opengl::glfw::Viewer::current_mouse_y)
-
-    // Callbacks
-    .def_readwrite("callback_init", &igl::opengl::glfw::Viewer::callback_init)
-    .def_readwrite("callback_pre_draw", &igl::opengl::glfw::Viewer::callback_pre_draw)
-    .def_readwrite("callback_post_draw", &igl::opengl::glfw::Viewer::callback_post_draw)
-    .def_readwrite("callback_mouse_down", &igl::opengl::glfw::Viewer::callback_mouse_down)
-    .def_readwrite("callback_mouse_up", &igl::opengl::glfw::Viewer::callback_mouse_up)
-    .def_readwrite("callback_mouse_move", &igl::opengl::glfw::Viewer::callback_mouse_move)
-    .def_readwrite("callback_mouse_scroll", &igl::opengl::glfw::Viewer::callback_mouse_scroll)
-    .def_readwrite("callback_key_pressed", &igl::opengl::glfw::Viewer::callback_key_pressed)
-    .def_readwrite("callback_key_down", &igl::opengl::glfw::Viewer::callback_key_down)
-    .def_readwrite("callback_key_up", &igl::opengl::glfw::Viewer::callback_key_up)
-    ;
-}

+ 0 - 23
python/modules/py_igl_png.cpp

@@ -1,23 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-#include "../python_shared.h"
-
-#include <igl/png/readPNG.h>
-#include <igl/png/writePNG.h>
-
-
-void python_export_igl_png(py::module &me) {
-
-  py::module m = me.def_submodule(
-    "png", "Wrappers for libigl functions that use png");
-
-  #include "../py_igl/png/py_readPNG.cpp"
-  #include "../py_igl/png/py_writePNG.cpp"
-
-}

+ 0 - 25
python/modules/py_igl_triangle.cpp

@@ -1,25 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-//#include <Eigen/Geometry>
-//#include <Eigen/Dense>
-//#include <Eigen/Sparse>
-
-
-#include "../python_shared.h"
-
-#include <igl/triangle/triangulate.h>
-
-
-void python_export_igl_triangle(py::module &me) {
-
-  py::module m = me.def_submodule(
-    "triangle", "Wrappers for libigl functions that use triangle");
-
-  #include "../py_igl/triangle/py_triangulate.cpp"
-
-}

+ 0 - 26
python/modules/py_typedefs.cpp

@@ -1,26 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-py::class_<RotationList>(m, "RotationList")
-    .def(py::init<>())
-    .def(py::init<size_t>())
-    .def("pop_back", &RotationList::pop_back)
-    /* There are multiple versions of push_back(), etc. Select the right ones. */
-    .def("append", (void (RotationList::*)(const Eigen::Quaterniond &)) &RotationList::push_back)
-    .def("back", (Eigen::Quaterniond &(RotationList::*)()) &RotationList::back)
-    .def("__len__", [](const RotationList &v) { return v.size(); })
-    .def("__getitem__", [](const RotationList &v, int b) { return v.at(b); })
-    .def("__setitem__", [](RotationList &v, int b, Eigen::Quaterniond &c) { return v.at(b) = c; })
-    .def("__iter__", [](RotationList &v) {
-       return py::make_iterator(v.begin(), v.end());
-}, py::keep_alive<0, 1>());
-
-
-py::bind_vector<std::vector<int>>(m, "VectorInt");
-py::bind_vector<std::vector<std::vector<int>>>(m, "VectorVectorInt");
-
-

+ 0 - 23
python/modules/py_typedefs.h

@@ -1,23 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-#include <pybind11/pybind11.h>
-#include <pybind11/stl_bind.h>
-#include <pybind11/stl.h>
-#include <pybind11/complex.h>
-#include <pybind11/functional.h>
-#include <pybind11/chrono.h>
-
-typedef std::vector<Eigen::Quaterniond,Eigen::aligned_allocator<Eigen::Quaterniond> > RotationList;
-PYBIND11_MAKE_OPAQUE(RotationList)
-
-//typedef std::vector<Eigen::Vector3d> TranslationList;
-//PYBIND11_MAKE_OPAQUE(TranslationList);
-
-PYBIND11_MAKE_OPAQUE(std::vector<int>)
-PYBIND11_MAKE_OPAQUE(std::vector<std::vector<int>>)
-

+ 0 - 777
python/modules/py_vector.cpp

@@ -1,777 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-#include <Eigen/Geometry>
-#include <Eigen/Dense>
-#include <Eigen/Sparse>
-
-
-#include "../python_shared.h"
-
-/// Creates Python bindings for a dynamic Eigen matrix
-template <typename Type>
-py::class_<Type> bind_eigen_2(py::module &m, const char *name) {
-    typedef typename Type::Scalar Scalar;
-
-    /* Many Eigen functions are templated and can't easily be referenced using
-       a function pointer, thus a big portion of the binding code below
-       instantiates Eigen code using small anonymous wrapper functions */
-    py::class_<Type> matrix(m, name, py::buffer_protocol());
-
-    matrix
-        /* Constructors */
-        .def(py::init<>())
-        .def(py::init<size_t, size_t>())
-        .def("__init__", [](Type &m, Scalar f) {
-            new (&m) Type(1, 1);
-            m(0, 0) = f;
-        })
-        .def("__init__", [](Type &m, py::buffer b) {
-            py::buffer_info info = b.request();
-            if (info.format != py::format_descriptor<Scalar>::format())
-                throw std::runtime_error("Incompatible buffer format!");
-            if (info.ndim == 1) {
-                new (&m) Type(info.shape[0], 1);
-                memcpy(m.data(), info.ptr, sizeof(Scalar) * m.size());
-            } else if (info.ndim == 2) {
-                if (info.strides[0] == sizeof(Scalar)) {
-                    new (&m) Type(info.shape[0], info.shape[1]);
-                    memcpy(m.data(), info.ptr, sizeof(Scalar) * m.size());
-                } else {
-                    new (&m) Type(info.shape[1], info.shape[0]);
-                    memcpy(m.data(), info.ptr, sizeof(Scalar) * m.size());
-                    m.transposeInPlace();
-                }
-            } else {
-                throw std::runtime_error("Incompatible buffer dimension!");
-            }
-        })
-        .def("__init__", [](Type &m, std::vector<std::vector< Scalar> >& b) {
-          if (b.size() == 0)
-          {
-            new (&m) Type(0, 0);
-            return;
-          }
-
-          // Size checks
-          unsigned rows = b.size();
-          unsigned cols = b[0].size();
-          for (unsigned i=0;i<rows;++i)
-            if (b[i].size() != cols)
-              throw std::runtime_error("All rows should have the same size!");
-
-          new (&m) Type(rows, cols);
-
-          m.resize(rows,cols);
-          for (unsigned i=0;i<rows;++i)
-            for (unsigned j=0;j<cols;++j)
-              m(i,j) = b[i][j];
-
-          return;
-        })
-        .def("__init__", [](Type &m, std::vector<Scalar>& b) {
-          if (b.size() == 0)
-          {
-            new (&m) Type(0, 0);
-            return;
-          }
-
-          // Size checks
-          unsigned rows = b.size();
-          unsigned cols = 1;
-
-          new (&m) Type(rows, cols);
-
-          m.resize(rows,cols);
-          for (unsigned i=0;i<rows;++i)
-            m(i,0) = b[i];
-
-          return;
-        })
-
-
-        /* Size query functions */
-        .def("size", [](const Type &m) { return m.size(); })
-        .def("cols", [](const Type &m) { return m.cols(); })
-        .def("rows", [](const Type &m) { return m.rows(); })
-        .def("shape", [](const Type &m) { return std::tuple<int,int>(m.rows(), m.cols()); })
-
-        /* Extract rows and columns */
-        .def("col", [](const Type &m, int i) {
-            if (i<0 || i>=m.cols())
-              throw std::runtime_error("Column index out of bound.");
-            return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(m.col(i));
-        })
-        .def("row", [](const Type &m, int i) {
-            if (i<0 || i>=m.rows())
-              throw std::runtime_error("Row index out of bound.");
-            return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(m.row(i));
-        })
-
-
-        /* Initialization */
-        .def("setZero", [](Type &m) { m.setZero(); })
-        .def("setIdentity", [](Type &m) { m.setIdentity(); })
-        .def("setConstant", [](Type &m, Scalar value) { m.setConstant(value); })
-        .def("setRandom", [](Type &m) { m.setRandom(); })
-
-        .def("setZero", [](Type &m, const int& r, const int& c) { m.setZero(r,c); })
-        .def("setIdentity", [](Type &m, const int& r, const int& c) { m.setIdentity(r,c); })
-        .def("setConstant", [](Type &m, const int& r, const int& c, Scalar value) { m.setConstant(r,c,value); })
-        .def("setRandom", [](Type &m, const int& r, const int& c) { m.setRandom(r,c); })
-
-        .def("setCol", [](Type &m, int i, const Type& v) { m.col(i) = v; })
-        .def("setRow", [](Type &m, int i, const Type& v) { m.row(i) = v; })
-
-        .def("setBlock", [](Type &m, int i, int j, int p, int q, const Type& v) { m.block(i,j,p,q) = v; })
-        .def("block", [](Type &m, int i, int j, int p, int q) { return Type(m.block(i,j,p,q)); })
-
-        .def("rightCols", [](Type &m, const int& k) { return Type(m.rightCols(k)); })
-        .def("leftCols", [](Type &m, const int& k) { return Type(m.leftCols(k)); })
-
-        .def("setLeftCols", [](Type &m, const int& k, const Type& v) { return Type(m.leftCols(k) = v); })
-        .def("setRightCols", [](Type &m, const int& k, const Type& v) { return Type(m.rightCols(k) = v); })
-
-        .def("topRows", [](Type &m, const int& k) { return Type(m.topRows(k)); })
-        .def("bottomRows", [](Type &m, const int& k) { return Type(m.bottomRows(k)); })
-
-        .def("setTopRows", [](Type &m, const int& k, const Type& v) { return Type(m.topRows(k) = v); })
-        .def("setBottomRows", [](Type &m, const int& k, const Type& v) { return Type(m.bottomRows(k) = v); })
-
-        .def("topLeftCorner", [](Type &m, const int& p, const int&q) { return Type(m.topLeftCorner(p,q)); })
-        .def("bottomLeftCorner", [](Type &m, const int& p, const int&q) { return Type(m.bottomLeftCorner(p,q)); })
-        .def("topRightCorner", [](Type &m, const int& p, const int&q) { return Type(m.topRightCorner(p,q)); })
-        .def("bottomRightCorner", [](Type &m, const int& p, const int&q) { return Type(m.bottomRightCorner(p,q)); })
-
-        /* Resizing */
-        .def("resize", [](Type &m, size_t s0, size_t s1) { m.resize(s0, s1); })
-        .def("resizeLike", [](Type &m, const Type &m2) { m.resizeLike(m2); })
-        .def("conservativeResize", [](Type &m, size_t s0, size_t s1) { m.conservativeResize(s0, s1); })
-
-
-        .def("mean", [](const Type &m) {return m.mean();})
-
-        .def("sum", [](const Type &m) {return m.sum();})
-        .def("prod", [](const Type &m) {return m.prod();})
-        .def("trace", [](const Type &m) {return m.trace();})
-        .def("norm", [](const Type &m) {return m.norm();})
-        .def("squaredNorm", [](const Type &m) {return m.squaredNorm();})
-        .def("squaredMean", [](const Type &m) {return m.array().square().mean();})
-
-        .def("minCoeff", [](const Type &m) {return m.minCoeff();} )
-        .def("maxCoeff", [](const Type &m) {return m.maxCoeff();} )
-
-        .def("castdouble", [](const Type &m) {return Eigen::MatrixXd(m.template cast<double>());})
-        .def("castint", [](const Type &m) {return Eigen::MatrixXi(m.template cast<int>());})
-
-        /* Component-wise operations */
-        .def("cwiseAbs", &Type::cwiseAbs)
-        .def("cwiseAbs2", &Type::cwiseAbs2)
-        .def("cwiseSqrt", &Type::cwiseSqrt)
-        .def("cwiseInverse", &Type::cwiseInverse)
-        .def("cwiseMin", [](const Type &m1, const Type &m2) -> Type { return m1.cwiseMin(m2); })
-        .def("cwiseMax", [](const Type &m1, const Type &m2) -> Type { return m1.cwiseMax(m2); })
-        .def("cwiseMin", [](const Type &m1, Scalar s) -> Type { return m1.cwiseMin(s); })
-        .def("cwiseMax", [](const Type &m1, Scalar s) -> Type { return m1.cwiseMax(s); })
-        .def("cwiseProduct", [](const Type &m1, const Type &m2) -> Type { return m1.cwiseProduct(m2); })
-        .def("cwiseQuotient", [](const Type &m1, const Type &m2) -> Type { return m1.cwiseQuotient(m2); })
-
-        /* Row and column-wise operations */
-        .def("rowwiseSet", [](Type &m, const Type &m2) {return Type(m.rowwise() = Eigen::Matrix<Scalar, 1, Eigen::Dynamic>(m2));} )
-        .def("rowwiseSum", [](const Type &m) {return Type(m.rowwise().sum());} )
-        .def("rowwiseProd", [](const Type &m) {return Type(m.rowwise().prod());} )
-        .def("rowwiseMean", [](const Type &m) {return Type(m.rowwise().mean());} )
-        .def("rowwiseNorm", [](const Type &m) {return Type(m.rowwise().norm());} )
-        .def("rowwiseNormalized", [](const Type &m) {return Type(m.rowwise().normalized());} )
-        .def("rowwiseReverse", [](const Type &m) {return Type(m.rowwise().reverse());} )
-        .def("rowwiseMinCoeff", [](const Type &m) {return Type(m.rowwise().minCoeff());} )
-        .def("rowwiseMaxCoeff", [](const Type &m) {return Type(m.rowwise().maxCoeff());} )
-
-        .def("colwiseSet", [](Type &m, const Type &m2) {return Type(m.colwise() = Eigen::Matrix<Scalar, Eigen::Dynamic, 1>(m2));} )
-        .def("colwiseSum", [](const Type &m) {return Type(m.colwise().sum());} )
-        .def("colwiseProd", [](const Type &m) {return Type(m.colwise().prod());} )
-        .def("colwiseMean", [](const Type &m) {return Type(m.colwise().mean());} )
-        .def("colwiseNorm", [](const Type &m) {return Type(m.colwise().norm());} )
-        .def("colwiseNormalized", [](const Type &m) {return Type(m.colwise().normalized());} )
-        .def("colwiseReverse", [](const Type &m) {return Type(m.colwise().reverse());} )
-        .def("colwiseMinCoeff", [](const Type &m) {return Type(m.colwise().minCoeff());} )
-        .def("colwiseMaxCoeff", [](const Type &m) {return Type(m.colwise().maxCoeff());} )
-
-        .def("replicate", [](const Type &m, const int& r, const int& c) {return Type(m.replicate(r,c));} )
-        .def("asDiagonal", [](const Type &m) {return Eigen::DiagonalMatrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(m.asDiagonal());} )
-
-        .def("sparseView", [](Type &m) { return Eigen::SparseMatrix<Scalar>(m.sparseView()); })
-
-        /* Arithmetic operators (def_cast forcefully casts the result back to a
-           Type to avoid type issues with Eigen's crazy expression templates) */
-        .def_cast(-py::self)
-        .def_cast(py::self + py::self)
-        .def_cast(py::self - py::self)
-        .def_cast(py::self * py::self)
-        // .def_cast(py::self - Scalar())
-        // .def_cast(py::self * Scalar())
-        // .def_cast(py::self / Scalar())
-
-        .def("__mul__", []
-        (const Type &a, const Scalar& b)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(a * b);
-        })
-        .def("__rmul__", [](const Type& a, const Scalar& b)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(b * a);
-        })
-
-        .def("__add__", []
-        (const Type &a, const Scalar& b)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(a.array() + b);
-        })
-        .def("__radd__", [](const Type& a, const Scalar& b)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(b + a.array());
-        })
-
-        .def("__sub__", []
-        (const Type &a, const Scalar& b)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(a.array() - b);
-        })
-        .def("__rsub__", [](const Type& a, const Scalar& b)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(b - a.array());
-        })
-
-        .def("__div__", []
-        (const Type &a, const Scalar& b)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(a / b);
-        })
-
-        .def("__truediv__", []
-        (const Type &a, const Scalar& b)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(a / b);
-        })
-
-        /* Arithmetic in-place operators */
-        .def_cast(py::self += py::self)
-        .def_cast(py::self -= py::self)
-        .def_cast(py::self *= py::self)
-        .def_cast(py::self *= Scalar())
-        .def_cast(py::self /= Scalar())
-
-        /* Comparison operators */
-        .def(py::self == py::self)
-        .def(py::self != py::self)
-        .def("__lt__", []
-        (const Type &a, const Scalar& b) -> Eigen::Matrix<bool,Eigen::Dynamic,Eigen::Dynamic>
-        {
-          return Eigen::Matrix<bool, Eigen::Dynamic, Eigen::Dynamic>(a.array() < b);
-        })
-        .def("__gt__", []
-        (const Type &a, const Scalar& b) -> Eigen::Matrix<bool,Eigen::Dynamic,Eigen::Dynamic>
-        {
-          return Eigen::Matrix<bool, Eigen::Dynamic, Eigen::Dynamic>(a.array() > b);
-        })
-        .def("__le__", []
-        (const Type &a, const Scalar& b) -> Eigen::Matrix<bool,Eigen::Dynamic,Eigen::Dynamic>
-        {
-          return Eigen::Matrix<bool, Eigen::Dynamic, Eigen::Dynamic>(a.array() <= b);
-        })
-        .def("__ge__", []
-        (const Type &a, const Scalar& b) -> Eigen::Matrix<bool,Eigen::Dynamic,Eigen::Dynamic>
-        {
-          return Eigen::Matrix<bool, Eigen::Dynamic, Eigen::Dynamic>(a.array() >= b);
-        })
-
-        .def("transposeInPlace", [](Type &m) { m.transposeInPlace(); })
-        /* Other transformations */
-        .def("transpose", [](Type &m) -> Type { return m.transpose(); })
-        /* Python protocol implementations */
-        .def("__repr__", [](const Type &v) {
-            std::ostringstream oss;
-            oss << v;
-            return oss.str();
-        })
-        .def("__getitem__", [](const Type &m, std::pair<size_t, size_t> i) {
-            if (i.first >= (size_t) m.rows() || i.second >= (size_t) m.cols())
-                throw py::index_error();
-            return m(i.first, i.second);
-         })
-        .def("__setitem__", [](Type &m, std::pair<size_t, size_t> i, Scalar v) {
-            if (i.first >= (size_t) m.rows() || i.second >= (size_t) m.cols())
-                throw py::index_error();
-            m(i.first, i.second) = v;
-         })
-
-         .def("__getitem__", [](const Type &m, size_t i) {
-             if (i >= (size_t) m.size())
-                 throw py::index_error();
-             return m(i);
-          })
-         .def("__setitem__", [](Type &m, size_t i, Scalar v) {
-           if (i >= (size_t) m.size())
-                 throw py::index_error();
-             m(i) = v;
-          })
-
-        /* Buffer access for interacting with NumPy */
-        .def_buffer([](Type &m) -> py::buffer_info {
-            return py::buffer_info(
-                m.data(),                /* Pointer to buffer */
-                sizeof(Scalar),          /* Size of one scalar */
-                /* Python struct-style format descriptor */
-                py::format_descriptor<Scalar>::format(),
-                2,                       /* Number of dimensions */
-                { (size_t) m.rows(),     /* Buffer dimensions */
-                  (size_t) m.cols() },
-                { sizeof(Scalar),        /* Strides (in bytes) for each index */
-                  sizeof(Scalar) * m.rows() }
-            );
-         })
-
-        /* Static initializers */
-        .def_static("Zero", [](size_t n, size_t m) { return Type(Type::Zero(n, m)); })
-        .def_static("Random", [](size_t n, size_t m) { return Type(Type::Random(n, m)); })
-        .def_static("Ones", [](size_t n, size_t m) { return Type(Type::Ones(n, m)); })
-        .def_static("Constant", [](size_t n, size_t m, Scalar value) { return Type(Type::Constant(n, m, value)); })
-        .def_static("Identity", [](size_t n, size_t m) { return Type(Type::Identity(n, m)); })
-        .def("MapMatrix", [](const Type& m, size_t r, size_t c)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(Eigen::Map<const Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>>(m.data(),r,c));
-        })
-
-        .def("copy", [](const Type &m) { return Type(m); })
-
-        ;
-    return matrix;
-}
-
-/// Creates Python bindings for a dynamic Eigen sparse order-2 tensor (i.e. a matrix)
-template <typename Type>
-py::class_<Type> bind_eigen_sparse_2(py::module &m, const char *name) {
-    typedef typename Type::Scalar Scalar;
-
-    /* Many Eigen functions are templated and can't easily be referenced using
-       a function pointer, thus a big portion of the binding code below
-       instantiates Eigen code using small anonymous wrapper functions */
-    py::class_<Type> matrix(m, name, py::buffer_protocol());
-
-    matrix
-        /* Constructors */
-        .def(py::init<>())
-        .def(py::init<size_t, size_t>())
-        // .def("__init__", [](Type &m, Scalar f) {
-        //     new (&m) Type(1, 1);
-        //     m(0, 0) = f;
-        // })
-        // .def("__init__", [](Type &m, py::buffer b) {
-        //     py::buffer_info info = b.request();
-        //     if (info.format != py::format_descriptor<Scalar>::value())
-        //         throw std::runtime_error("Incompatible buffer format!");
-        //     if (info.ndim == 1) {
-        //         new (&m) Type(info.shape[0], 1);
-        //         memcpy(m.data(), info.ptr, sizeof(Scalar) * m.size());
-        //     } else if (info.ndim == 2) {
-        //         if (info.strides[0] == sizeof(Scalar)) {
-        //             new (&m) Type(info.shape[0], info.shape[1]);
-        //             memcpy(m.data(), info.ptr, sizeof(Scalar) * m.size());
-        //         } else {
-        //             new (&m) Type(info.shape[1], info.shape[0]);
-        //             memcpy(m.data(), info.ptr, sizeof(Scalar) * m.size());
-        //             m.transposeInPlace();
-        //         }
-        //     } else {
-        //         throw std::runtime_error("Incompatible buffer dimension!");
-        //     }
-        // })
-
-        /* Size query functions */
-        .def("size", [](const Type &m) { return m.size(); })
-        .def("cols", [](const Type &m) { return m.cols(); })
-        .def("rows", [](const Type &m) { return m.rows(); })
-        .def("shape", [](const Type &m) { return std::tuple<int,int>(m.rows(), m.cols()); })
-
-
-        /* Initialization */
-        .def("setZero", [](Type &m) { m.setZero(); })
-        .def("setIdentity", [](Type &m) { m.setIdentity(); })
-
-        .def("transpose", [](Type &m) { return Type(m.transpose()); })
-        .def("norm", [](Type &m) { return m.norm(); })
-
-        /* Resizing */
-        // .def("resize", [](Type &m, size_t s0, size_t s1) { m.resize(s0, s1); })
-        // .def("resizeLike", [](Type &m, const Type &m2) { m.resizeLike(m2); })
-        // .def("conservativeResize", [](Type &m, size_t s0, size_t s1) { m.conservativeResize(s0, s1); })
-
-        /* Component-wise operations */
-        // .def("cwiseAbs", &Type::cwiseAbs)
-        // .def("cwiseAbs2", &Type::cwiseAbs2)
-        // .def("cwiseSqrt", &Type::cwiseSqrt)
-        // .def("cwiseInverse", &Type::cwiseInverse)
-        // .def("cwiseMin", [](const Type &m1, const Type &m2) -> Type { return m1.cwiseMin(m2); })
-        // .def("cwiseMax", [](const Type &m1, const Type &m2) -> Type { return m1.cwiseMax(m2); })
-        // .def("cwiseMin", [](const Type &m1, Scalar s) -> Type { return m1.cwiseMin(s); })
-        // .def("cwiseMax", [](const Type &m1, Scalar s) -> Type { return m1.cwiseMax(s); })
-        // .def("cwiseProduct", [](const Type &m1, const Type &m2) -> Type { return m1.cwiseProduct(m2); })
-        // .def("cwiseQuotient", [](const Type &m1, const Type &m2) -> Type { return m1.cwiseQuotient(m2); })
-
-        /* Arithmetic operators (def_cast forcefully casts the result back to a
-           Type to avoid type issues with Eigen's crazy expression templates) */
-        .def_cast(-py::self)
-        .def_cast(py::self + py::self)
-        .def_cast(py::self - py::self)
-        .def_cast(py::self * py::self)
-        .def_cast(py::self * Scalar())
-        .def_cast(Scalar() * py::self)
-        // Special case, sparse * dense produces a dense matrix
-
-        // .def("__mul__", []
-        // (const Type &a, const Scalar& b)
-        // {
-        //   return Type(a * b);
-        // })
-        // .def("__rmul__", [](const Type& a, const Scalar& b)
-        // {
-        //   return Type(b * a);
-        // })
-
-        .def("__mul__", []
-        (const Type &a, const Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>& b)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(a * b);
-        })
-        .def("__rmul__", [](const Type& a, const Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>& b)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(b * a);
-        })
-
-        .def("__mul__", []
-        (const Type &a, const Eigen::DiagonalMatrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>& b)
-        {
-          return Type(a * b);
-        })
-        .def("__rmul__", [](const Type& a, const Eigen::DiagonalMatrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>& b)
-        {
-          return Type(b * a);
-        })
-
-        //.def(py::self * Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>())
-//        .def_cast(py::self / Scalar())
-
-        /* Arithmetic in-place operators */
-        // .def_cast(py::self += py::self)
-        // .def_cast(py::self -= py::self)
-        // .def_cast(py::self *= py::self)
-        // .def_cast(py::self *= Scalar())
-        // .def_cast(py::self /= Scalar())
-
-        /* Comparison operators */
-        // .def(py::self == py::self)
-        // .def(py::self != py::self)
-
-        // .def("transposeInPlace", [](Type &m) { m.transposeInPlace(); })
-        // /* Other transformations */
-        // .def("transpose", [](Type &m) -> Type { return m.transpose(); })
-
-        /* Python protocol implementations */
-        .def("__repr__", [](const Type &v) {
-            std::ostringstream oss;
-            oss << v;
-            return oss.str();
-        })
-
-        /* Static initializers */
-        // .def_static("Zero", [](size_t n, size_t m) { return Type(Type::Zero(n, m)); })
-        // .def_static("Ones", [](size_t n, size_t m) { return Type(Type::Ones(n, m)); })
-        // .def_static("Constant", [](size_t n, size_t m, Scalar value) { return Type(Type::Constant(n, m, value)); })
-        // .def_static("Identity", [](size_t n, size_t m) { return Type(Type::Identity(n, m)); })
-        .def("toCOO",[](const Type& m)
-        {
-          Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic> t(m.nonZeros(),3);
-          int count = 0;
-          for (int k=0; k<m.outerSize(); ++k)
-            for (typename Type::InnerIterator it(m,k); it; ++it)
-              t.row(count++) << it.row(), it.col(), it.value();
-          return t;
-        })
-
-        .def("fromCOO",[](Type& m, const Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>& t, int rows, int cols)
-        {
-          typedef Eigen::Triplet<Scalar> T;
-          std::vector<T> tripletList;
-          tripletList.reserve(t.rows());
-          for(unsigned i=0;i<t.rows();++i)
-            tripletList.push_back(T(round(t(i,0)),round(t(i,1)),t(i,2)));
-
-          if (rows == -1)
-            rows = t.col(0).maxCoeff()+1;
-
-          if (cols == -1)
-            cols = t.col(1).maxCoeff()+1;
-
-          m.resize(rows,cols);
-          m.setFromTriplets(tripletList.begin(), tripletList.end());
-        }, py::arg("t"), py::arg("rows") = -1, py::arg("cols") = -1)
-
-        .def("insert",[](Type& m, const int row, const int col, const Scalar value)
-        {
-          return m.insert(row,col) = value;
-        }, py::arg("row"), py::arg("col"), py::arg("value"))
-
-        .def("makeCompressed",[](Type& m)
-        {
-          return m.makeCompressed();
-        })
-
-        .def("diagonal", [](const Type &m) {return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(m.diagonal());} )
-
-        ;
-    return matrix;
-}
-
-/// Creates Python bindings for a diagonal Eigen sparse order-2 tensor (i.e. a matrix)
-template <typename Type>
-py::class_<Type> bind_eigen_diagonal_2(py::module &m, const char *name) {
-    typedef typename Type::Scalar Scalar;
-
-    /* Many Eigen functions are templated and can't easily be referenced using
-       a function pointer, thus a big portion of the binding code below
-       instantiates Eigen code using small anonymous wrapper functions */
-    py::class_<Type> matrix(m, name, py::buffer_protocol());
-
-    matrix
-        /* Constructors */
-        .def(py::init<>())
-        //.def(py::init<size_t, size_t>())
-
-        /* Size query functions */
-        .def("size", [](const Type &m) { return m.size(); })
-        .def("cols", [](const Type &m) { return m.cols(); })
-        .def("rows", [](const Type &m) { return m.rows(); })
-        .def("shape", [](const Type &m) { return std::tuple<int,int>(m.rows(), m.cols()); })
-
-        /* Initialization */
-        .def("setZero", [](Type &m) { m.setZero(); })
-        .def("setIdentity", [](Type &m) { m.setIdentity(); })
-
-        /* Arithmetic operators (def_cast forcefully casts the result back to a
-           Type to avoid type issues with Eigen's crazy expression templates) */
-        // .def_cast(-py::self)
-        // .def_cast(py::self + py::self)
-        // .def_cast(py::self - py::self)
-        // .def_cast(py::self * py::self)
-        .def_cast(py::self * Scalar())
-        .def_cast(Scalar() * py::self)
-
-        // // Special case, sparse * dense produces a dense matrix
-        // .def("__mul__", []
-        // (const Type &a, const Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>& b)
-        // {
-        //   return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(a * b);
-        // })
-        // .def("__rmul__", [](const Type& a, const Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>& b)
-        // {
-        //   return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(b * a);
-        // })
-
-        .def("__mul__", []
-        (const Type &a, const Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>& b)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(a * b);
-        })
-        .def("__rmul__", [](const Type& a, const Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>& b)
-        {
-          return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(b * a);
-        })
-
-        .def("__mul__", []
-        (const Type &a, const Eigen::SparseMatrix<Scalar>& b)
-        {
-          return Eigen::SparseMatrix<Scalar>(a * b);
-        })
-        .def("__rmul__", [](const Type& a, const Eigen::SparseMatrix<Scalar>& b)
-        {
-          return Eigen::SparseMatrix<Scalar>(b * a);
-        })
-
-        /* Python protocol implementations */
-        .def("__repr__", [](const Type &/*v*/) {
-            std::ostringstream oss;
-            oss << "<< operator undefined for diagonal matrices";
-            return oss.str();
-        })
-
-        /* Other transformations */
-
-        ;
-    return matrix;
-}
-
-
-void python_export_vector(py::module &m) {
-
-  py::module me = m.def_submodule(
-    "eigen", "Wrappers for Eigen types");
-
-    /* Bindings for VectorXd */
-    // bind_eigen_1<Eigen::VectorXd> (me, "VectorXd");
-    // py::implicitly_convertible<py::buffer, Eigen::VectorXd>();
-    // py::implicitly_convertible<double, Eigen::VectorXd>();
-
-    /* Bindings for VectorXi */
-    // bind_eigen_1<Eigen::VectorXi> (me, "VectorXi");
-    // py::implicitly_convertible<py::buffer, Eigen::VectorXi>();
-    // py::implicitly_convertible<double, Eigen::VectorXi>();
-
-    /* Bindings for MatrixXd */
-    bind_eigen_2<Eigen::MatrixXd> (me, "MatrixXd");
-    //py::implicitly_convertible<py::buffer, Eigen::MatrixXd>();
-    //py::implicitly_convertible<double, Eigen::MatrixXd>();
-
-    /* Bindings for MatrixXi */
-    bind_eigen_2<Eigen::MatrixXi> (me, "MatrixXi");
-    //py::implicitly_convertible<py::buffer, Eigen::MatrixXi>();
-    //py::implicitly_convertible<double, Eigen::MatrixXi>();
-
-    /* Bindings for MatrixXb */
-    #if EIGEN_VERSION_AT_LEAST(3,3,0)
-    // Temporarily disabled with Eigen 3.3
-    #else
-    bind_eigen_2<Eigen::Matrix<bool,Eigen::Dynamic,Eigen::Dynamic> > (me, "MatrixXb");
-    #endif
-
-    /* Bindings for MatrixXuc */
-    bind_eigen_2<Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic> > (me, "MatrixXuc");
-    // py::implicitly_convertible<py::buffer, Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic> >();
-    // py::implicitly_convertible<double, Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic> >();
-
-    // /* Bindings for Vector3d */
-    // auto vector3 = bind_eigen_1_3<Eigen::Vector3d>(me, "Vector3d");
-    // vector3
-    //     .def("norm", [](const Eigen::Vector3d &v) { return v.norm(); })
-    //     .def("squaredNorm", [](const Eigen::Vector3d &v) { return v.squaredNorm(); })
-    //     .def("normalize", [](Eigen::Vector3d &v) { v.normalize(); })
-    //     .def("normalized", [](const Eigen::Vector3d &v) -> Eigen::Vector3d { return v.normalized(); })
-    //     .def("dot", [](const Eigen::Vector3d &v1, const Eigen::Vector3d &v2) { return v1.dot(v2); })
-    //     .def("cross", [](const Eigen::Vector3d &v1, const Eigen::Vector3d &v2) -> Eigen::Vector3d { return v1.cross(v2); })
-    //     .def_property("x", [](const Eigen::Vector3d &v) -> double { return v.x(); },
-    //                        [](Eigen::Vector3d &v, double x) { v.x() = x; }, "X coordinate")
-    //     .def_property("y", [](const Eigen::Vector3d &v) -> double { return v.y(); },
-    //                        [](Eigen::Vector3d &v, double y) { v.y() = y; }, "Y coordinate")
-    //     .def_property("z", [](const Eigen::Vector3d &v) -> double { return v.z(); },
-    //                        [](Eigen::Vector3d &v, double z) { v.z() = z; }, "Z coordinate");
-    //
-    // py::implicitly_convertible<py::buffer, Eigen::Vector3d>();
-    // py::implicitly_convertible<double, Eigen::Vector3d>();
-
-    /* Bindings for SparseMatrix<double> */
-    bind_eigen_sparse_2< Eigen::SparseMatrix<double> > (me, "SparseMatrixd");
-
-    /* Bindings for SparseMatrix<int> */
-    bind_eigen_sparse_2< Eigen::SparseMatrix<int> > (me, "SparseMatrixi");
-
-    /* Bindings for DiagonalMatrix<double> */
-    bind_eigen_diagonal_2< Eigen::DiagonalMatrix<double,Eigen::Dynamic,Eigen::Dynamic> > (me, "DiagonalMatrixd");
-
-    /* Bindings for DiagonalMatrix<int> */
-    bind_eigen_diagonal_2< Eigen::DiagonalMatrix<int,Eigen::Dynamic,Eigen::Dynamic> > (me, "DiagonalMatrixi");
-
-    /* Bindings for SimplicialLLT*/
-    py::class_<Eigen::SimplicialLLT<Eigen::SparseMatrix<double > >> simpliciallltsparse(me, "SimplicialLLTsparse");
-
-    simpliciallltsparse
-    .def(py::init<>())
-    .def(py::init<Eigen::SparseMatrix<double>>())
-    .def("info",[](const Eigen::SimplicialLLT<Eigen::SparseMatrix<double > >& s)
-    {
-       if (s.info() == Eigen::Success)
-          return "Success";
-       else
-          return "Numerical Issue";
-    })
-    .def("analyzePattern",[](Eigen::SimplicialLLT<Eigen::SparseMatrix<double > >& s, const Eigen::SparseMatrix<double>& a) { return s.analyzePattern(a); })
-    .def("factorize",[](Eigen::SimplicialLLT<Eigen::SparseMatrix<double > >& s, const Eigen::SparseMatrix<double>& a) { return s.factorize(a); })
-    .def("solve",[](const Eigen::SimplicialLLT<Eigen::SparseMatrix<double > >& s, const Eigen::MatrixXd& rhs) { return Eigen::MatrixXd(s.solve(rhs)); })
-    ;
-
-    // Bindings for Affine3d
-    py::class_<Eigen::Affine3d > affine3d(me, "Affine3d");
-
-    affine3d
-    .def(py::init<>())
-    .def_static("Identity", []() { return Eigen::Affine3d::Identity(); })
-    .def("setIdentity",[](Eigen::Affine3d& a){
-        return a.setIdentity();
-    })
-    .def("rotate",[](Eigen::Affine3d& a, double angle, Eigen::MatrixXd axis) {
-        assert_is_Vector3("axis", axis);
-        return a.rotate(Eigen::AngleAxisd(angle, Eigen::Vector3d(axis)));
-    })
-    .def("rotate",[](Eigen::Affine3d& a, Eigen::Quaterniond quat) {
-        return a.rotate(quat);
-    })
-    .def("translate",[](Eigen::Affine3d& a, Eigen::MatrixXd offset) {
-        assert_is_Vector3("offset", offset);
-        return a.translate(Eigen::Vector3d(offset));
-    })
-    .def("matrix", [](Eigen::Affine3d& a) -> Eigen::MatrixXd {
-        return Eigen::MatrixXd(a.matrix());
-    })
-    ;
-    // Bindings for Quaterniond
-    py::class_<Eigen::Quaterniond > quaterniond(me, "Quaterniond");
-
-    quaterniond
-    .def(py::init<>())
-    .def(py::init<double, double, double, double>())
-    .def("__init__", [](Eigen::Quaterniond &q, double angle, Eigen::MatrixXd axis) {
-        assert_is_Vector3("axis", axis);
-        new (&q) Eigen::Quaterniond(Eigen::AngleAxisd(angle, Eigen::Vector3d(axis)));
-    })
-    .def_static("Identity", []() { return Eigen::Quaterniond::Identity(); })
-    .def("__repr__", [](const Eigen::Quaterniond &v) {
-        std::ostringstream oss;
-        oss << "(" << v.w() << ", " << v.x() << ", " << v.y() << ", " << v.z() << ")";
-        return oss.str();
-    })
-    .def("conjugate",[](Eigen::Quaterniond& q) {
-        return q.conjugate();
-    })
-    .def("normalize",[](Eigen::Quaterniond& q) {
-        return q.normalize();
-    })
-    .def("slerp",[](Eigen::Quaterniond& q, double & t, Eigen::Quaterniond other) {
-        return q.slerp(t, other);
-    })
-//    .def_cast(-py::self)
-//    .def_cast(py::self + py::self)
-//    .def_cast(py::self - py::self)
-    .def_cast(py::self * py::self)
-    // .def_cast(py::self - Scalar())
-    // .def_cast(py::self * Scalar())
-    // .def_cast(py::self / Scalar())
-
-//    .def("__mul__", []
-//    (const Type &a, const Scalar& b)
-//    {
-//      return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(a * b);
-//    })
-//    .def("__rmul__", [](const Type& a, const Scalar& b)
-//    {
-//      return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(b * a);
-//    })
-    ;
-
-
-
-
-
-
-}

+ 0 - 1530
python/py_doc.cpp

@@ -1,1530 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-const char *__doc_igl_active_set = R"igl_Qu8mg5v7(// Known Bugs: rows of [Aeq;Aieq] **must** be linearly independent. Should be
-  // using QR decomposition otherwise:
-  //   http://www.okstate.edu/sas/v8/sashtml/ormp/chap5/sect32.htm
-  //
-  // ACTIVE_SET Minimize quadratic energy
-  //
-  // 0.5*Z'*A*Z + Z'*B + C with constraints
-  //
-  // that Z(known) = Y, optionally also subject to the constraints Aeq*Z = Beq,
-  // and further optionally subject to the linear inequality constraints that
-  // Aieq*Z <= Bieq and constant inequality constraints lx <= x <= ux
-  //
-  // Inputs:
-  //   A  n by n matrix of quadratic coefficients
-  //   B  n by 1 column of linear coefficients
-  //   known  list of indices to known rows in Z
-  //   Y  list of fixed values corresponding to known rows in Z
-  //   Aeq  meq by n list of linear equality constraint coefficients
-  //   Beq  meq by 1 list of linear equality constraint constant values
-  //   Aieq  mieq by n list of linear inequality constraint coefficients
-  //   Bieq  mieq by 1 list of linear inequality constraint constant values
-  //   lx  n by 1 list of lower bounds [] implies -Inf
-  //   ux  n by 1 list of upper bounds [] implies Inf
-  //   params  struct of additional parameters (see below)
-  //   Z  if not empty, is taken to be an n by 1 list of initial guess values
-  //     (see output)
-  // Outputs:
-  //   Z  n by 1 list of solution values
-  // Returns true on success, false on error
-  //
-  // Benchmark: For a harmonic solve on a mesh with 325K facets, matlab 2.2
-  // secs, igl/min_quad_with_fixed.h 7.1 secs
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_adjacency_list = R"igl_Qu8mg5v7(// Constructs the graph adjacency list of a given mesh (V,F)
-  // Templates:
-  //   T  should be a eigen sparse matrix primitive type like int or double
-  // Inputs:
-  //   F       #F by dim list of mesh faces (must be triangles)
-  //   sorted  flag that indicates if the list should be sorted counter-clockwise
-  // Outputs:
-  //   A  vector<vector<T> > containing at row i the adjacent vertices of vertex i
-  //
-  // Example:
-  //   // Mesh in (V,F)
-  //   vector<vector<double> > A;
-  //   adjacency_list(F,A);
-  //
-  // See also: edges, cotmatrix, diag)igl_Qu8mg5v7";
-const char *__doc_igl_arap_precomputation = R"igl_Qu8mg5v7(// Compute necessary information to start using an ARAP deformation
-  //
-  // Inputs:
-  //   V  #V by dim list of mesh positions
-  //   F  #F by simplex-size list of triangle|tet indices into V
-  //   dim  dimension being used at solve time. For deformation usually dim =
-  //     V.cols(), for surface parameterization V.cols() = 3 and dim = 2
-  //   b  #b list of "boundary" fixed vertex indices into V
-  // Outputs:
-  //   data  struct containing necessary precomputation)igl_Qu8mg5v7";
-const char *__doc_igl_arap_solve = R"igl_Qu8mg5v7(// Inputs:
-  //   bc  #b by dim list of boundary conditions
-  //   data  struct containing necessary precomputation and parameters
-  //   U  #V by dim initial guess)igl_Qu8mg5v7";
-const char *__doc_igl_avg_edge_length = R"igl_Qu8mg5v7(// Compute the average edge length for the given triangle mesh
-  // Templates:
-  //   DerivedV derived from vertex positions matrix type: i.e. MatrixXd
-  //   DerivedF derived from face indices matrix type: i.e. MatrixXi
-  //   DerivedL derived from edge lengths matrix type: i.e. MatrixXd
-  // Inputs:
-  //   V  eigen matrix #V by 3
-  //   F  #F by simplex-size list of mesh faces (must be simplex)
-  // Outputs:
-  //   l  average edge length
-  //
-  // See also: adjacency_matrix)igl_Qu8mg5v7";
-const char *__doc_igl_barycenter = R"igl_Qu8mg5v7(// Computes the barycenter of every simplex
-  //
-  // Inputs:
-  //   V  #V x dim matrix of vertex coordinates
-  //   F  #F x simplex_size  matrix of indices of simplex corners into V
-  // Output:
-  //   BC  #F x dim matrix of 3d vertices
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_barycentric_coordinates = R"igl_Qu8mg5v7(// Compute barycentric coordinates in a tet
-  //
-  // Inputs:
-  //   P  #P by 3 Query points in 3d
-  //   A  #P by 3 Tet corners in 3d
-  //   B  #P by 3 Tet corners in 3d
-  //   C  #P by 3 Tet corners in 3d
-  //   D  #P by 3 Tet corners in 3d
-  // Outputs:
-  //   L  #P by 4 list of barycentric coordinates
-  //   )igl_Qu8mg5v7";
-const char *__doc_igl_barycentric_to_global = R"igl_Qu8mg5v7(// Converts barycentric coordinates in the embree form to 3D coordinates
-  // Embree stores barycentric coordinates as triples: fid, bc1, bc2
-  // fid is the id of a face, bc1 is the displacement of the point wrt the
-  // first vertex v0 and the edge v1-v0. Similarly, bc2 is the displacement
-  // wrt v2-v0.
-  //
-  // Input:
-  // V:  #Vx3 Vertices of the mesh
-  // F:  #Fxe Faces of the mesh
-  // bc: #Xx3 Barycentric coordinates, one row per point
-  //
-  // Output:
-  // #X: #Xx3 3D coordinates of all points in bc)igl_Qu8mg5v7";
-
-const char *__doc_igl_bbw = R"igl_Qu8mg5v7(// Compute Bounded Biharmonic Weights on a given domain (V,Ele) with a given
-  // set of boundary conditions
-  //
-  // Templates
-  //   DerivedV  derived type of eigen matrix for V (e.g. MatrixXd)
-  //   DerivedF  derived type of eigen matrix for F (e.g. MatrixXi)
-  //   Derivedb  derived type of eigen matrix for b (e.g. VectorXi)
-  //   Derivedbc  derived type of eigen matrix for bc (e.g. MatrixXd)
-  //   DerivedW  derived type of eigen matrix for W (e.g. MatrixXd)
-  // Inputs:
-  //   V  #V by dim vertex positions
-  //   Ele  #Elements by simplex-size list of element indices
-  //   b  #b boundary indices into V
-  //   bc #b by #W list of boundary values
-  //   data  object containing options, initial guess --> solution and results
-  // Outputs:
-  //   W  #V by #W list of *unnormalized* weights to normalize use
-  //    igl::normalize_row_sums(W,W);
-  // Returns true on success, false on failure)igl_Qu8mg5v7";
-const char *__doc_igl_boundary_conditions = R"igl_Qu8mg5v7(// Compute boundary conditions for automatic weights computation. This
-  // function expects that the given mesh (V,Ele) has sufficient samples
-  // (vertices) exactly at point handle locations and exactly along bone and
-  // cage edges.
-  //
-  // Inputs:
-  //   V  #V by dim list of domain vertices
-  //   Ele  #Ele by simplex-size list of simplex indices
-  //   C  #C by dim list of handle positions
-  //   P  #P by 1 list of point handle indices into C
-  //   BE  #BE by 2 list of bone edge indices into C
-  //   CE  #CE by 2 list of cage edge indices into *P*
-  // Outputs:
-  //   b  #b list of boundary indices (indices into V of vertices which have
-  //     known, fixed values)
-  //   bc #b by #weights list of known/fixed values for boundary vertices
-  //     (notice the #b != #weights in general because #b will include all the
-  //     intermediary samples along each bone, etc.. The ordering of the
-  //     weights corresponds to [P;BE]
-  // Returns false if boundary conditions are suspicious:
-  //   P and BE are empty
-  //   bc is empty
-  //   some column of bc doesn't have a 0 (assuming bc has >1 columns)
-  //   some column of bc doesn't have a 1 (assuming bc has >1 columns))igl_Qu8mg5v7";
-const char *__doc_igl_boundary_facets = R"igl_Qu8mg5v7(// BOUNDARY_FACETS Determine boundary faces (edges) of tetrahedra (triangles)
-  // stored in T (analogous to qptoolbox's `outline` and `boundary_faces`).
-  //
-  // Templates:
-  //   IntegerT  integer-value: e.g. int
-  //   IntegerF  integer-value: e.g. int
-  // Input:
-  //  T  tetrahedron (triangle) index list, m by 4 (3), where m is the number of tetrahedra
-  // Output:
-  //  F  list of boundary faces, n by 3 (2), where n is the number of boundary faces
-  //
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_boundary_loop = R"igl_Qu8mg5v7(// Compute list of ordered boundary loops for a manifold mesh.
-  //
-  // Templates:
-  //  Index  index type
-  // Inputs:
-  //   F  #V by dim list of mesh faces
-  // Outputs:
-  //   L  list of loops where L[i] = ordered list of boundary vertices in loop i
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_cat = R"igl_Qu8mg5v7(// Perform concatenation of a two matrices along a single dimension
-  // If dim == 1, then C = [A;B]. If dim == 2 then C = [A B]
-  //
-  // Template:
-  //   Scalar  scalar data type for sparse matrices like double or int
-  //   Mat  matrix type for all matrices (e.g. MatrixXd, SparseMatrix)
-  //   MatC  matrix type for output matrix (e.g. MatrixXd) needs to support
-  //     resize
-  // Inputs:
-  //   A  first input matrix
-  //   B  second input matrix
-  //   dim  dimension along which to concatenate, 1 or 2
-  // Outputs:
-  //   C  output matrix
-  //   )igl_Qu8mg5v7";
-const char *__doc_igl_collapse_edge = R"igl_Qu8mg5v7(See collapse_edge for the documentation.)igl_Qu8mg5v7";
-const char *__doc_igl_colon = R"igl_Qu8mg5v7(// Colon operator like matlab's colon operator. Enumerats values between low
-  // and hi with step step.
-  // Templates:
-  //   L  should be a eigen matrix primitive type like int or double
-  //   S  should be a eigen matrix primitive type like int or double
-  //   H  should be a eigen matrix primitive type like int or double
-  //   T  should be a eigen matrix primitive type like int or double
-  // Inputs:
-  //   low  starting value if step is valid then this is *always* the first
-  //     element of I
-  //   step  step difference between sequential elements returned in I,
-  //     remember this will be cast to template T at compile time. If low<hi
-  //     then step must be positive. If low>hi then step must be negative.
-  //     Otherwise I will be set to empty.
-  //   hi  ending value, if (hi-low)%step is zero then this will be the last
-  //     element in I. If step is positive there will be no elements greater
-  //     than hi, vice versa if hi<low
-  // Output:
-  //   I  list of values from low to hi with step size step)igl_Qu8mg5v7";
-const char *__doc_igl_column_to_quats = R"igl_Qu8mg5v7(// "Columnize" a list of quaternions (q1x,q1y,q1z,q1w,q2x,q2y,q2z,q2w,...)
-  //
-  // Inputs:
-  //   Q  n*4-long list of coefficients
-  // Outputs:
-  //   vQ  n-long list of quaternions
-  // Returns false if n%4!=0)igl_Qu8mg5v7";
-const char *__doc_igl_comb_cross_field = R"igl_Qu8mg5v7(// Inputs:
-  //   V          #V by 3 eigen Matrix of mesh vertex 3D positions
-  //   F          #F by 4 eigen Matrix of face (quad) indices
-  //   PD1in      #F by 3 eigen Matrix of the first per face cross field vector
-  //   PD2in      #F by 3 eigen Matrix of the second per face cross field vector
-  // Output:
-  //   PD1out      #F by 3 eigen Matrix of the first combed cross field vector
-  //   PD2out      #F by 3 eigen Matrix of the second combed cross field vector
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_comb_frame_field = R"igl_Qu8mg5v7(// Inputs:
-  //   V            #V by 3 eigen Matrix of mesh vertex 3D positions
-  //   F            #F by 4 eigen Matrix of face (quad) indices
-  //   PD1          #F by 3 eigen Matrix of the first per face cross field vector
-  //   PD2          #F by 3 eigen Matrix of the second per face cross field vector
-  //   BIS1_combed  #F by 3 eigen Matrix of the first combed bisector field vector
-  //   BIS2_combed  #F by 3 eigen Matrix of the second combed bisector field vector
-  // Output:
-  //   PD1_combed  #F by 3 eigen Matrix of the first combed cross field vector
-  //   PD2_combed  #F by 3 eigen Matrix of the second combed cross field vector
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_compute_frame_field_bisectors = R"igl_Qu8mg5v7(// Compute bisectors of a frame field defined on mesh faces
-  // Inputs:
-  //   V     #V by 3 eigen Matrix of mesh vertex 3D positions
-  //   F     #F by 3 eigen Matrix of face (triangle) indices
-  //   B1    #F by 3 eigen Matrix of face (triangle) base vector 1
-  //   B2    #F by 3 eigen Matrix of face (triangle) base vector 2
-  //   PD1   #F by 3 eigen Matrix of the first per face frame field vector
-  //   PD2   #F by 3 eigen Matrix of the second per face frame field vector
-  // Output:
-  //   BIS1  #F by 3 eigen Matrix of the first per face frame field bisector
-  //   BIS2  #F by 3 eigen Matrix of the second per face frame field bisector
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_copyleft_cgal_mesh_boolean = R"igl_Qu8mg5v7(//  MESH_BOOLEAN Compute boolean csg operations on "solid", consistently
-      //  oriented meshes.
-      //
-      //  Inputs:
-      //    VA  #VA by 3 list of vertex positions of first mesh
-      //    FA  #FA by 3 list of triangle indices into VA
-      //    VB  #VB by 3 list of vertex positions of second mesh
-      //    FB  #FB by 3 list of triangle indices into VB
-      //    type  type of boolean operation
-      //  Outputs:
-      //    VC  #VC by 3 list of vertex positions of boolean result mesh
-      //    FC  #FC by 3 list of triangle indices into VC
-      //    J  #FC list of indices into [FA;FA.rows()+FB] revealing "birth" facet
-      //  Returns true if inputs induce a piecewise constant winding number
-      //  field and type is valid
-      //
-      //  See also: mesh_boolean_cork, intersect_other,
-      //  remesh_self_intersections)igl_Qu8mg5v7";
-const char *__doc_igl_copyleft_cgal_remesh_self_intersections = R"igl_Qu8mg5v7(// Given a triangle mesh (V,F) compute a new mesh (VV,FF) which is the same
-      // as (V,F) except that any self-intersecting triangles in (V,F) have been
-      // subdivided (new vertices and face created) so that the self-intersection
-      // contour lies exactly on edges in (VV,FF). New vertices will appear in
-      // original faces or on original edges. New vertices on edges are "merged"
-      // only across original faces sharing that edge. This means that if the input
-      // triangle mesh is a closed manifold the output will be too.
-      //
-      // Inputs:
-      //   V  #V by 3 list of vertex positions
-      //   F  #F by 3 list of triangle indices into V
-      //   params  struct of optional parameters
-      // Outputs:
-      //   VV  #VV by 3 list of vertex positions
-      //   FF  #FF by 3 list of triangle indices into VV
-      //   IF  #intersecting face pairs by 2  list of intersecting face pairs,
-      //     indexing F
-      //   J  #FF list of indices into F denoting birth triangle
-      //   IM  #VV list of indices into VV of unique vertices.
-      //
-      // Known bugs: If an existing edge in (V,F) lies exactly on another face then
-      // any resulting additional vertices along that edge may not get properly
-      // connected so that the output mesh has the same global topology. This is
-      // because
-      //
-      // Example:
-      //     // resolve intersections
-      //     igl::copyleft::cgal::remesh_self_intersections(V,F,params,VV,FF,IF,J,IM);
-      //     // _apply_ duplicate vertex mapping IM to FF
-      //     for_each(FF.data(),FF.data()+FF.size(),[&IM](int & a){a=IM(a);});
-      //     // remove any vertices now unreferenced after duplicate mapping.
-      //     igl::remove_unreferenced(VV,FF,SV,SF,UIM);
-      //     // Now (SV,SF) is ready to extract outer hull
-      //     igl::copyleft::cgal::outer_hull(SV,SF,G,J,flip);
-      //)igl_Qu8mg5v7";
-const char *__doc_igl_copyleft_comiso_miq = R"igl_Qu8mg5v7(// Inputs:
-    //   V              #V by 3 list of mesh vertex 3D positions
-    //   F              #F by 3 list of faces indices in V
-    //   PD1            #V by 3 first line of the Jacobian per triangle
-    //   PD2            #V by 3 second line of the Jacobian per triangle
-    //                  (optional, if empty it will be a vector in the tangent plane orthogonal to PD1)
-    //   scale          global scaling for the gradient (controls the quads resolution)
-    //   stiffness      weight for the stiffness iterations
-    //   direct_round   greedily round all integer variables at once (greatly improves optimization speed but lowers quality)
-    //   iter           stiffness iterations (0 = no stiffness)
-    //   local_iter     number of local iterations for the integer rounding
-    //   do_round       enables the integer rounding (disabling it could be useful for debugging)
-    //   round_vertices id of additional vertices that should be snapped to integer coordinates
-    //   hard_features  #H by 2 list of pairs of vertices that belongs to edges that should be snapped to integer coordinates
-    //
-    // Output:
-    //   UV             #UV by 2 list of vertices in 2D
-    //   FUV            #FUV by 3 list of face indices in UV
-    //
-    // TODO: rename the parameters name in the cpp consistently
-    //       improve the handling of hard_features, right now it might fail in difficult cases)igl_Qu8mg5v7";
-const char *__doc_igl_copyleft_comiso_nrosy = R"igl_Qu8mg5v7(// Generate a N-RoSy field from a sparse set of constraints
-    //
-    // Inputs:
-    //   V       #V by 3 list of mesh vertex coordinates
-    //   F       #F by 3 list of mesh faces (must be triangles)
-    //   b       #B by 1 list of constrained face indices
-    //   bc      #B by 3 list of representative vectors for the constrained
-    //     faces
-    //   b_soft  #S by 1 b for soft constraints
-    //   w_soft  #S by 1 weight for the soft constraints (0-1)
-    //   bc_soft #S by 3 bc for soft constraints
-    //   N       the degree of the N-RoSy vector field
-    //   soft    the strength of the soft constraints w.r.t. smoothness
-    //           (0 -> smoothness only, 1->constraints only)
-    // Outputs:
-    //   R       #F by 3 the representative vectors of the interpolated field
-    //   S       #V by 1 the singularity index for each vertex (0 = regular))igl_Qu8mg5v7";
-const char *__doc_igl_copyleft_marching_cubes = R"igl_Qu8mg5v7(// marching_cubes( values, points, x_res, y_res, z_res, vertices, faces )
-    //
-    // performs marching cubes reconstruction on the grid defined by values, and
-    // points, and generates vertices and faces
-    //
-    // Input:
-    //  values  #number_of_grid_points x 1 array -- the scalar values of an
-    //    implicit function defined on the grid points (<0 in the inside of the
-    //    surface, 0 on the border, >0 outside)
-    //  points  #number_of_grid_points x 3 array -- 3-D positions of the grid
-    //    points, ordered in x,y,z order:
-    //      points[index] = the point at (x,y,z) where :
-    //      x = (index % (xres -1),
-    //      y = (index / (xres-1)) %(yres-1),
-    //      z = index / (xres -1) / (yres -1) ).
-    //      where x,y,z index x, y, z dimensions
-    //      i.e. index = x + y*xres + z*xres*yres
-    //  xres  resolutions of the grid in x dimension
-    //  yres  resolutions of the grid in y dimension
-    //  zres  resolutions of the grid in z dimension
-    // Output:
-    //   vertices  #V by 3 list of mesh vertex positions
-    //   faces  #F by 3 list of mesh triangle indices
-    //)igl_Qu8mg5v7";
-const char *__doc_igl_copyleft_swept_volume = R"igl_Qu8mg5v7(// Compute the surface of the swept volume of a solid object with surface
-    // (V,F) mesh under going rigid motion.
-    //
-    // Inputs:
-    //   V  #V by 3 list of mesh positions in reference pose
-    //   F  #F by 3 list of mesh indices into V
-    //   transform  function handle so that transform(t) returns the rigid
-    //     transformation at time t∈[0,1]
-    //   steps  number of time steps: steps=3 --> t∈{0,0.5,1}
-    //   grid_res  number of grid cells on the longest side containing the
-    //     motion (isolevel+1 cells will also be added on each side as padding)
-    //   isolevel  distance level to be contoured as swept volume
-    // Outputs:
-    //   SV  #SV by 3 list of mesh positions of the swept surface
-    //   SF  #SF by 3 list of mesh faces into SV)igl_Qu8mg5v7";
-const char *__doc_igl_copyleft_tetgen_tetrahedralize = R"igl_Qu8mg5v7(// Mesh the interior of a surface mesh (V,F) using tetgen
-      //
-      // Inputs:
-      //   V  #V by 3 vertex position list
-      //   F  #F list of polygon face indices into V (0-indexed)
-      //   switches  string of tetgen options (See tetgen documentation) e.g.
-      //     "pq1.414a0.01" tries to mesh the interior of a given surface with
-      //       quality and area constraints
-      //     "" will mesh the convex hull constrained to pass through V (ignores F)
-      // Outputs:
-      //   TV  #V by 3 vertex position list
-      //   TT  #T by 4 list of tet face indices
-      //   TF  #F by 3 list of triangle face indices
-      // Returns status:
-      //   0 success
-      //   1 tetgen threw exception
-      //   2 tetgen did not crash but could not create any tets (probably there are
-      //     holes, duplicate faces etc.)
-      //   -1 other error)igl_Qu8mg5v7";
-const char *__doc_igl_cotmatrix = R"igl_Qu8mg5v7(// Constructs the cotangent stiffness matrix (discrete laplacian) for a given
-  // mesh (V,F).
-  //
-  // Templates:
-  //   DerivedV  derived type of eigen matrix for V (e.g. derived from
-  //     MatrixXd)
-  //   DerivedF  derived type of eigen matrix for F (e.g. derived from
-  //     MatrixXi)
-  //   Scalar  scalar type for eigen sparse matrix (e.g. double)
-  // Inputs:
-  //   V  #V by dim list of mesh vertex positions
-  //   F  #F by simplex_size list of mesh faces (must be triangles)
-  // Outputs:
-  //   L  #V by #V cotangent matrix, each row i corresponding to V(i,:)
-  //
-  // See also: adjacency_matrix
-  //
-  // Note: This Laplacian uses the convention that diagonal entries are
-  // **minus** the sum of off-diagonal entries. The diagonal entries are
-  // therefore in general negative and the matrix is **negative** semi-definite
-  // (immediately, -L is **positive** semi-definite)
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_covariance_scatter_matrix = R"igl_Qu8mg5v7(// Construct the covariance scatter matrix for a given arap energy
-  // Inputs:
-  //   V  #V by Vdim list of initial domain positions
-  //   F  #F by 3 list of triangle indices into V
-  //   energy  ARAPEnergyType enum value defining which energy is being used.
-  //     See ARAPEnergyType.h for valid options and explanations.
-  // Outputs:
-  //   CSM dim*#V/#F by dim*#V sparse matrix containing special laplacians along
-  //     the diagonal so that when multiplied by V gives covariance matrix
-  //     elements, can be used to speed up covariance matrix computation)igl_Qu8mg5v7";
-const char *__doc_igl_cross_field_mismatch = R"igl_Qu8mg5v7(// Inputs:
-  //   V         #V by 3 eigen Matrix of mesh vertex 3D positions
-  //   F         #F by 3 eigen Matrix of face (quad) indices
-  //   PD1       #F by 3 eigen Matrix of the first per face cross field vector
-  //   PD2       #F by 3 eigen Matrix of the second per face cross field vector
-  //   isCombed  boolean, specifying whether the field is combed (i.e. matching has been precomputed.
-  //             If not, the field is combed first.
-  // Output:
-  //   Handle_MMatch    #F by 3 eigen Matrix containing the integer mismatch of the cross field
-  //                    across all face edges
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_cut_mesh_from_singularities = R"igl_Qu8mg5v7(// Given a mesh (V,F) and the integer mismatch of a cross field per edge
-  // (mismatch), finds the cut_graph connecting the singularities (seams) and the
-  // degree of the singularities singularity_index
-  //
-  // Input:
-  //   V  #V by 3 list of mesh vertex positions
-  //   F  #F by 3 list of faces
-  //   mismatch  #F by 3 list of per corner integer mismatch
-  // Outputs:
-  //   seams  #F by 3 list of per corner booleans that denotes if an edge is a
-  //     seam or not
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_deform_skeleton = R"igl_Qu8mg5v7(// Deform a skeleton.
-  //
-  // Inputs:
-  //   C  #C by 3 list of joint positions
-  //   BE  #BE by 2 list of bone edge indices
-  //   vA  #BE list of bone transformations
-  // Outputs
-  //   CT  #BE*2 by 3 list of deformed joint positions
-  //   BET  #BE by 2 list of bone edge indices (maintains order)
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_directed_edge_orientations = R"igl_Qu8mg5v7(// Determine rotations that take each edge from the x-axis to its given rest
-  // orientation.
-  //
-  // Inputs:
-  //   C  #C by 3 list of edge vertex positions
-  //   E  #E by 2 list of directed edges
-  // Outputs:
-  //   Q  #E list of quaternions
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_directed_edge_parents = R"igl_Qu8mg5v7(// Recover "parents" (preceding edges) in a tree given just directed edges.
-  //
-  // Inputs:
-  //   E  #E by 2 list of directed edges
-  // Outputs:
-  //   P  #E list of parent indices into E (-1) means root
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_doublearea = R"igl_Qu8mg5v7(// DOUBLEAREA computes twice the area for each input triangle[quad]
-  //
-  // Templates:
-  //   DerivedV  derived type of eigen matrix for V (e.g. derived from
-  //     MatrixXd)
-  //   DerivedF  derived type of eigen matrix for F (e.g. derived from
-  //     MatrixXi)
-  //   DeriveddblA  derived type of eigen matrix for dblA (e.g. derived from
-  //     MatrixXd)
-  // Inputs:
-  //   V  #V by dim list of mesh vertex positions
-  //   F  #F by simplex_size list of mesh faces (must be triangles or quads)
-  // Outputs:
-  //   dblA  #F list of triangle[quad] double areas (SIGNED only for 2D input)
-  //
-  // Known bug: For dim==3 complexity is O(#V + #F)!! Not just O(#F). This is a big deal
-  // if you have 1million unreferenced vertices and 1 face)igl_Qu8mg5v7";
-const char *__doc_igl_doublearea_single = R"igl_Qu8mg5v7(// Single triangle in 2D!
-  //
-  // This should handle streams of corners not just single corners)igl_Qu8mg5v7";
-const char *__doc_igl_doublearea_quad = R"igl_Qu8mg5v7(// DOUBLEAREA_QUAD computes twice the area for each input quadrilateral
-  //
-  // Inputs:
-  //   V  #V by dim list of mesh vertex positions
-  //   F  #F by simplex_size list of mesh faces (must be quadrilaterals)
-  // Outputs:
-  //   dblA  #F list of quadrilateral double areas
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_dqs = R"igl_Qu8mg5v7(// Dual quaternion skinning
-  //
-  // Inputs:
-  //   V  #V by 3 list of rest positions
-  //   W  #W by #C list of weights
-  //   vQ  #C list of rotation quaternions
-  //   vT  #C list of translation vectors
-  // Outputs:
-  //   U  #V by 3 list of new positions)igl_Qu8mg5v7";
-const char *__doc_igl_edge_lengths = R"igl_Qu8mg5v7(// Constructs a list of lengths of edges opposite each index in a face
-  // (triangle/tet) list
-  //
-  // Templates:
-  //   DerivedV derived from vertex positions matrix type: i.e. MatrixXd
-  //   DerivedF derived from face indices matrix type: i.e. MatrixXi
-  //   DerivedL derived from edge lengths matrix type: i.e. MatrixXd
-  // Inputs:
-  //   V  eigen matrix #V by 3
-  //   F  #F by 2 list of mesh edges
-  //    or
-  //   F  #F by 3 list of mesh faces (must be triangles)
-  //    or
-  //   T  #T by 4 list of mesh elements (must be tets)
-  // Outputs:
-  //   L  #F by {1|3|6} list of edge lengths
-  //     for edges, column of lengths
-  //     for triangles, columns correspond to edges [1,2],[2,0],[0,1]
-  //     for tets, columns correspond to edges
-  //     [3 0],[3 1],[3 2],[1 2],[2 0],[0 1]
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_edge_topology = R"igl_Qu8mg5v7(// Initialize Edges and their topological relations (assumes an edge-manifold
-  // mesh)
-  //
-  // Output:
-  // EV  : #Ex2, Stores the edge description as pair of indices to vertices
-  // FE : #Fx3, Stores the Triangle-Edge relation
-  // EF : #Ex2: Stores the Edge-Triangle relation
-  //
-  // TODO: This seems to be a inferior duplicate of edge_flaps.h:
-  //   - unused input parameter V
-  //   - roughly 2x slower than edge_flaps
-  //   - outputs less information: edge_flaps reveals corner opposite edge
-  //   - FE uses non-standard and ambiguous order: FE(f,c) is merely an edge
-  //     incident on corner c of face f. In contrast, edge_flaps's EMAP(f,c) reveals
-  //     the edge _opposite_ corner c of face f)igl_Qu8mg5v7";
-const char *__doc_igl_eigs = R"igl_Qu8mg5v7(See eigs for the documentation.)igl_Qu8mg5v7";
-const char *__doc_igl_embree_ambient_occlusion = R"igl_Qu8mg5v7(// Compute ambient occlusion per given point
-    //
-    // Inputs:
-    //    ei  EmbreeIntersector containing (V,F)
-    //    P  #P by 3 list of origin points
-    //    N  #P by 3 list of origin normals
-    // Outputs:
-    //    S  #P list of ambient occlusion values between 1 (fully occluded) and
-    //      0 (not occluded)
-    //)igl_Qu8mg5v7";
-const char *__doc_igl_embree_line_mesh_intersection = R"igl_Qu8mg5v7(// Project the point cloud V_source onto the triangle mesh
-    // V_target,F_target.
-    // A ray is casted for every vertex in the direction specified by
-    // N_source and its opposite.
-    //
-    // Input:
-    // V_source: #Vx3 Vertices of the source mesh
-    // N_source: #Vx3 Normals of the point cloud
-    // V_target: #V2x3 Vertices of the target mesh
-    // F_target: #F2x3 Faces of the target mesh
-    //
-    // Output:
-    // #Vx3 matrix of baricentric coordinate. Each row corresponds to
-    // a vertex of the projected mesh and it has the following format:
-    // id b1 b2. id is the id of a face of the source mesh. b1 and b2 are
-    // the barycentric coordinates wrt the first two edges of the triangle
-    // To convert to standard global coordinates, see barycentric_to_global.h)igl_Qu8mg5v7";
-const char *__doc_igl_embree_reorient_facets_raycast = R"igl_Qu8mg5v7(// Orient each component (identified by C) of a mesh (V,F) using ambient
-    // occlusion such that the front side is less occluded than back side, as
-    // described in "A Simple Method for Correcting Facet Orientations in
-    // Polygon Meshes Based on Ray Casting" [Takayama et al. 2014].
-    //
-    // Inputs:
-    //   V  #V by 3 list of vertex positions
-    //   F  #F by 3 list of triangle indices
-    //   rays_total  Total number of rays that will be shot
-    //   rays_minimum  Minimum number of rays that each patch should receive
-    //   facet_wise  Decision made for each face independently, no use of patches
-    //     (i.e., each face is treated as a patch)
-    //   use_parity  Use parity mode
-    //   is_verbose  Verbose output to cout
-    // Outputs:
-    //   I  #F list of whether face has been flipped
-    //   C  #F list of patch ID (output of bfs_orient > manifold patches))igl_Qu8mg5v7";
-const char *__doc_igl_exact_geodesic = R"igl_Qu8mg5v7( 
-    // Exact geodesic algorithm for triangular mesh with the implementation from https://code.google.com/archive/p/geodesic/,  
-    // and the algorithm first described by Mitchell, Mount and Papadimitriou in 1987 
-    //  
-    // Inputs: 
-    //   V  #V by 3 list of 3D vertex positions 
-    //   F  #F by 3 list of mesh faces 
-    //   VS #VS by 1 vector specifying indices of source vertices 
-    //   FS #FS by 1 vector specifying indices of source faces 
-    //   VT #VT by 1 vector specifying indices of target vertices 
-    //   FT #FT by 1 vector specifying indices of target faces 
-    // Output: 
-    //   D  #VT+#FT by 1 vector of geodesic distances of each target w.r.t. the nearest one in the source set 
-    // 
-    // Note:  
-    //      Specifying a face as target/source means its center.  
-    //)igl_Qu8mg5v7";
-const char *__doc_igl_heat_geodesics_precompute = R"igl_Qu8mg5v7(
-    // Precompute factorized solvers for computing a fast approximation of
-    // geodesic distances on a mesh (V,F). [Crane et al. 2013]
-    //
-    // Inputs:
-    //   V  #V by dim list of mesh vertex positions
-    //   F  #F by 3 list of mesh face indices into V
-    // Outputs:
-    //   data  precomputation data (see heat_geodesics_solve)
-    //)igl_Qu8mg5v7";
-const char *__doc_igl_heat_geodesics_solve = R"igl_Qu8mg5v7(
-    // Compute fast approximate geodesic distances using precomputed data from a
-    // set of selected source vertices (gamma)
-    //
-    // Inputs:
-    //   data  precomputation data (see heat_geodesics_precompute)
-    //   gamma  #gamma list of indices into V of source vertices
-    // Outputs:
-    //   D  #V list of distances to gamma
-    //)igl_Qu8mg5v7";
-const char *__doc_igl_find_cross_field_singularities = R"igl_Qu8mg5v7(// Inputs:
-  //   V                #V by 3 eigen Matrix of mesh vertex 3D positions
-  //   F                #F by 3 eigen Matrix of face (quad) indices
-  //   Handle_MMatch    #F by 3 eigen Matrix containing the integer mismatch of the cross field
-  //                    across all face edges
-  // Output:
-  //   isSingularity    #V by 1 boolean eigen Vector indicating the presence of a singularity on a vertex
-  //   singularityIndex #V by 1 integer eigen Vector containing the singularity indices
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_fit_rotations = R"igl_Qu8mg5v7(// Known issues: This seems to be implemented in Eigen/Geometry:
-  // Eigen::umeyama
-  //
-  // FIT_ROTATIONS Given an input mesh and new positions find rotations for
-  // every covariance matrix in a stack of covariance matrices
-  //
-  // Inputs:
-  //   S  nr*dim by dim stack of covariance matrices
-  //   single_precision  whether to use single precision (faster)
-  // Outputs:
-  //   R  dim by dim * nr list of rotations
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_fit_rotations_planar = R"igl_Qu8mg5v7(// FIT_ROTATIONS Given an input mesh and new positions find 2D rotations for
-  // every vertex that best maps its one ring to the new one ring
-  //
-  // Inputs:
-  //   S  nr*dim by dim stack of covariance matrices, third column and every
-  //   third row will be ignored
-  // Outputs:
-  //   R  dim by dim * nr list of rotations, third row and third column of each
-  //   rotation will just be identity
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_fit_rotations_SSE = R"igl_Qu8mg5v7(See fit_rotations_SSE for the documentation.)igl_Qu8mg5v7";
-const char *__doc_igl_floor = R"igl_Qu8mg5v7(// Floor a given matrix to nearest integers
-  //
-  // Inputs:
-  //   X  m by n matrix of scalars
-  // Outputs:
-  //   Y  m by n matrix of floored integers)igl_Qu8mg5v7";
-const char *__doc_igl_forward_kinematics = R"igl_Qu8mg5v7(// Given a skeleton and a set of relative bone rotations compute absolute
-  // rigid transformations for each bone.
-  //
-  // Inputs:
-  //   C  #C by dim list of joint positions
-  //   BE  #BE by 2 list of bone edge indices
-  //   P  #BE list of parent indices into BE
-  //   dQ  #BE list of relative rotations
-  //   dT  #BE list of relative translations
-  // Outputs:
-  //   vQ  #BE list of absolute rotations
-  //   vT  #BE list of absolute translations)igl_Qu8mg5v7";
-const char *__doc_igl_gaussian_curvature = R"igl_Qu8mg5v7(// Compute discrete local integral gaussian curvature (angle deficit, without
-  // averaging by local area).
-  //
-  // Inputs:
-  //   V  #V by 3 eigen Matrix of mesh vertex 3D positions
-  //   F  #F by 3 eigen Matrix of face (triangle) indices
-  // Output:
-  //   K  #V by 1 eigen Matrix of discrete gaussian curvature values
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_get_seconds = R"igl_Qu8mg5v7(// Return the current time in seconds since program start
-  //
-  // Example:
-  //    const auto & tictoc = []()
-  //    {
-  //      static double t_start = igl::get_seconds();
-  //      double diff = igl::get_seconds()-t_start;
-  //      t_start += diff;
-  //      return diff;
-  //    };
-  //    tictoc();
-  //    ... // part 1
-  //    cout<<"part 1: "<<tictoc()<<endl;
-  //    ... // part 2
-  //    cout<<"part 2: "<<tictoc()<<endl;
-  //    ... // etc)igl_Qu8mg5v7";
-const char *__doc_igl_grad = R"igl_Qu8mg5v7(// Gradient of a scalar function defined on piecewise linear elements (mesh)
-  // is constant on each triangle [tetrahedron] i,j,k:
-  // grad(Xijk) = (Xj-Xi) * (Vi - Vk)^R90 / 2A + (Xk-Xi) * (Vj - Vi)^R90 / 2A
-  // where Xi is the scalar value at vertex i, Vi is the 3D position of vertex
-  // i, and A is the area of triangle (i,j,k). ^R90 represent a rotation of
-  // 90 degrees
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_harmonic = R"igl_Qu8mg5v7(// Compute k-harmonic weight functions "coordinates".
-  //
-  //
-  // Inputs:
-  //   V  #V by dim vertex positions
-  //   F  #F by simplex-size list of element indices
-  //   b  #b boundary indices into V
-  //   bc #b by #W list of boundary values
-  //   k  power of harmonic operation (1: harmonic, 2: biharmonic, etc)
-  // Outputs:
-  //   W  #V by #W list of weights
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_hsv_to_rgb = R"igl_Qu8mg5v7(// Convert RGB to HSV
-  //
-  // Inputs:
-  //   h  hue value (degrees: [0,360])
-  //   s  saturation value ([0,1])
-  //   v  value value ([0,1])
-  // Outputs:
-  //   r  red value ([0,1])
-  //   g  green value ([0,1])
-  //   b  blue value ([0,1]))igl_Qu8mg5v7";
-const char *__doc_igl_internal_angles = R"igl_Qu8mg5v7(// Compute internal angles for a triangle mesh
-  //
-  // Inputs:
-  //   V  #V by dim eigen Matrix of mesh vertex nD positions
-  //   F  #F by poly-size eigen Matrix of face (triangle) indices
-  // Output:
-  //   K  #F by poly-size eigen Matrix of internal angles
-  //     for triangles, columns correspond to edges [1,2],[2,0],[0,1]
-  //
-  // Known Issues:
-  //   if poly-size ≠ 3 then dim must equal 3.)igl_Qu8mg5v7";
-const char *__doc_igl_internal_angles_using_squared_edge_lengths = R"igl_Qu8mg5v7(// Inputs:
-  //   L_sq  #F by 3 list of squared edge lengths
-  // Output:
-  //   K  #F by poly-size eigen Matrix of internal angles
-  //     for triangles, columns correspond to edges [1,2],[2,0],[0,1]
-  //
-  // Note:
-  //   Usage of internal_angles_using_squared_edge_lengths is preferred to internal_angles_using_squared_edge_lengths)igl_Qu8mg5v7";
-const char *__doc_igl_internal_angles_using_edge_lengths = R"igl_Qu8mg5v7(// Inputs:
-  //   L  #F by 3 list of edge lengths
-  // Output:
-  //   K  #F by poly-size eigen Matrix of internal angles
-  //     for triangles, columns correspond to edges [1,2],[2,0],[0,1]
-  //
-  // Note:
-  //   Usage of internal_angles_using_squared_edge_lengths is preferred to internal_angles_using_squared_edge_lengths
-  //   This function is deprecated and probably will be removed in future versions)igl_Qu8mg5v7";
-const char *__doc_igl_invert_diag = R"igl_Qu8mg5v7(// Templates:
-  //   T  should be a eigen sparse matrix primitive type like int or double
-  // Inputs:
-  //   X  an m by n sparse matrix
-  // Outputs:
-  //   Y  an m by n sparse matrix)igl_Qu8mg5v7";
-const char *__doc_igl_is_irregular_vertex = R"igl_Qu8mg5v7(// Determine if a vertex is irregular, i.e. it has more than 6 (triangles)
-  // or 4 (quads) incident edges. Vertices on the boundary are ignored.
-  //
-  // Inputs:
-  //   V  #V by dim list of vertex positions
-  //   F  #F by 3[4] list of triangle[quads] indices
-  // Returns #V vector of bools revealing whether vertices are singular
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_jet = R"igl_Qu8mg5v7(// JET like MATLAB's jet
-  //
-  // Inputs:
-  //   m  number of colors
-  // Outputs:
-  //   J  m by list of RGB colors between 0 and 1
-  //
-//#ifndef IGL_NO_EIGEN
-//  void jet(const int m, Eigen::MatrixXd & J);
-//#endif
-  // Wrapper for directly computing [r,g,b] values for a given factor f between
-  // 0 and 1
-  //
-  // Inputs:
-  //   f  factor determining color value as if 0 was min and 1 was max
-  // Outputs:
-  //   r  red value
-  //   g  green value
-  //   b  blue value)igl_Qu8mg5v7";
-const char *__doc_igl_lbs_matrix = R"igl_Qu8mg5v7(// LBS_MATRIX Linear blend skinning can be expressed by V' = M * T where V' is
-  // a #V by dim matrix of deformed vertex positions (one vertex per row), M is a
-  // #V by (dim+1)*#T (composed of weights and rest positions) and T is a
-  // #T*(dim+1) by dim matrix of #T stacked transposed transformation matrices.
-  // See equations (1) and (2) in "Fast Automatic Skinning Transformations"
-  // [Jacobson et al 2012]
-  //
-  // Inputs:
-  //   V  #V by dim list of rest positions
-  //   W  #V+ by #T  list of weights
-  // Outputs:
-  //   M  #V by #T*(dim+1)
-  //
-  // In MATLAB:
-  //   kron(ones(1,size(W,2)),[V ones(size(V,1),1)]).*kron(W,ones(1,size(V,2)+1)))igl_Qu8mg5v7";
-const char *__doc_igl_lbs_matrix_column = R"igl_Qu8mg5v7(// LBS_MATRIX  construct a matrix that when multiplied against a column of
-  // affine transformation entries computes new coordinates of the vertices
-  //
-  // I'm not sure it makes since that the result is stored as a sparse matrix.
-  // The number of non-zeros per row *is* dependent on the number of mesh
-  // vertices and handles.
-  //
-  // Inputs:
-  //   V  #V by dim list of vertex rest positions
-  //   W  #V by #handles list of correspondence weights
-  // Output:
-  //   M  #V * dim by #handles * dim * (dim+1) matrix such that
-  //     new_V(:) = LBS(V,W,A) = reshape(M * A,size(V)), where A is a column
-  //     vectors formed by the entries in each handle's dim by dim+1
-  //     transformation matrix. Specifcally, A =
-  //       reshape(permute(Astack,[3 1 2]),n*dim*(dim+1),1)
-  //     or A = [Lxx;Lyx;Lxy;Lyy;tx;ty], and likewise for other dim
-  //     if Astack(:,:,i) is the dim by (dim+1) transformation at handle i)igl_Qu8mg5v7";
-const char *__doc_igl_local_basis = R"igl_Qu8mg5v7(// Compute a local orthogonal reference system for each triangle in the given mesh
-  // Templates:
-  //   DerivedV derived from vertex positions matrix type: i.e. MatrixXd
-  //   DerivedF derived from face indices matrix type: i.e. MatrixXi
-  // Inputs:
-  //   V  eigen matrix #V by 3
-  //   F  #F by 3 list of mesh faces (must be triangles)
-  // Outputs:
-  //   B1 eigen matrix #F by 3, each vector is tangent to the triangle
-  //   B2 eigen matrix #F by 3, each vector is tangent to the triangle and perpendicular to B1
-  //   B3 eigen matrix #F by 3, normal of the triangle
-  //
-  // See also: adjacency_matrix)igl_Qu8mg5v7";
-const char *__doc_igl_lscm = R"igl_Qu8mg5v7(// Compute a Least-squares conformal map parametrization (equivalently
-  // derived in "Intrinsic Parameterizations of Surface Meshes" [Desbrun et al.
-  // 2002] and "Least Squares Conformal Maps for Automatic Texture Atlas
-  // Generation" [Lévy et al. 2002]), though this implementation follows the
-  // derivation in: "Spectral Conformal Parameterization" [Mullen et al. 2008]
-  // (note, this does **not** implement the Eigen-decomposition based method in
-  // [Mullen et al. 2008], which is not equivalent). Input should be a manifold
-  // mesh (also no unreferenced vertices) and "boundary" (fixed vertices) `b`
-  // should contain at least two vertices per connected component.
-  //
-  // Inputs:
-  //   V  #V by 3 list of mesh vertex positions
-  //   F  #F by 3 list of mesh faces (must be triangles)
-  //   b  #b boundary indices into V
-  //   bc #b by 3 list of boundary values
-  // Outputs:
-  //   UV #V by 2 list of 2D mesh vertex positions in UV space
-  // Returns true only on solver success.
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_map_vertices_to_circle = R"igl_Qu8mg5v7(// Map the vertices whose indices are in a given boundary loop (bnd) on the
-  // unit circle with spacing proportional to the original boundary edge
-  // lengths.
-  //
-  // Inputs:
-  //   V  #V by dim list of mesh vertex positions
-  //   b  #W list of vertex ids
-  // Outputs:
-  //   UV   #W by 2 list of 2D position on the unit circle for the vertices in b)igl_Qu8mg5v7";
-const char *__doc_igl_massmatrix = R"igl_Qu8mg5v7(// Constructs the mass (area) matrix for a given mesh (V,F).
-  //
-  // Templates:
-  //   DerivedV  derived type of eigen matrix for V (e.g. derived from
-  //     MatrixXd)
-  //   DerivedF  derived type of eigen matrix for F (e.g. derived from
-  //     MatrixXi)
-  //   Scalar  scalar type for eigen sparse matrix (e.g. double)
-  // Inputs:
-  //   V  #V by dim list of mesh vertex positions
-  //   F  #F by simplex_size list of mesh faces (must be triangles)
-  //   type  one of the following ints:
-  //     MASSMATRIX_TYPE_BARYCENTRIC  barycentric
-  //     MASSMATRIX_TYPE_VORONOI voronoi-hybrid {default}
-  //     MASSMATRIX_TYPE_FULL full {not implemented}
-  // Outputs:
-  //   M  #V by #V mass matrix
-  //
-  // See also: adjacency_matrix
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_min_quad_with_fixed_precompute = R"igl_Qu8mg5v7(// Known Bugs: rows of Aeq **should probably** be linearly independent.
-  // During precomputation, the rows of a Aeq are checked via QR. But in case
-  // they're not then resulting probably will no longer be sparse: it will be
-  // slow.
-  //
-  // MIN_QUAD_WITH_FIXED Minimize a quadratic energy of the form
-  //
-  // trace( 0.5*Z'*A*Z + Z'*B + constant )
-  //
-  // subject to
-  //
-  //   Z(known,:) = Y, and
-  //   Aeq*Z = Beq
-  //
-  // Templates:
-  //   T  should be a eigen matrix primitive type like int or double
-  // Inputs:
-  //   A  n by n matrix of quadratic coefficients
-  //   known list of indices to known rows in Z
-  //   Y  list of fixed values corresponding to known rows in Z
-  //   Aeq  m by n list of linear equality constraint coefficients
-  //   pd flag specifying whether A(unknown,unknown) is positive definite
-  // Outputs:
-  //   data  factorization struct with all necessary information to solve
-  //     using min_quad_with_fixed_solve
-  // Returns true on success, false on error
-  //
-  // Benchmark: For a harmonic solve on a mesh with 325K facets, matlab 2.2
-  // secs, igl/min_quad_with_fixed.h 7.1 secs
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_min_quad_with_fixed_solve = R"igl_Qu8mg5v7(// Solves a system previously factored using min_quad_with_fixed_precompute
-  //
-  // Template:
-  //   T  type of sparse matrix (e.g. double)
-  //   DerivedY  type of Y (e.g. derived from VectorXd or MatrixXd)
-  //   DerivedZ  type of Z (e.g. derived from VectorXd or MatrixXd)
-  // Inputs:
-  //   data  factorization struct with all necessary precomputation to solve
-  //   B  n by k column of linear coefficients
-  //   Y  b by k list of constant fixed values
-  //   Beq  m by k list of linear equality constraint constant values
-  // Outputs:
-  //   Z  n by k solution
-  //   sol  #unknowns+#lagrange by k solution to linear system
-  // Returns true on success, false on error)igl_Qu8mg5v7";
-const char *__doc_igl_min_quad_with_fixed = R"igl_Qu8mg5v7(See min_quad_with_fixed for the documentation.)igl_Qu8mg5v7";
-const char *__doc_igl_normalize_row_lengths = R"igl_Qu8mg5v7(// Obsolete: just use A.rowwise().normalize() or B=A.rowwise().normalized();
-  //
-  // Normalize the rows in A so that their lengths are each 1 and place the new
-  // entries in B
-  // Inputs:
-  //   A  #rows by k input matrix
-  // Outputs:
-  //   B  #rows by k input matrix, can be the same as A)igl_Qu8mg5v7";
-const char *__doc_igl_normalize_row_sums = R"igl_Qu8mg5v7(// Normalize the rows in A so that their sums are each 1 and place the new
-  // entries in B
-  // Inputs:
-  //   A  #rows by k input matrix
-  // Outputs:
-  //   B  #rows by k input matrix, can be the same as A
-  //
-  // Note: This is just calling an Eigen one-liner.)igl_Qu8mg5v7";
-const char *__doc_igl_parula = R"igl_Qu8mg5v7(// PARULA like MATLAB's parula
-  //
-  // Inputs:
-  //   m  number of colors
-  // Outputs:
-  //   J  m by list of RGB colors between 0 and 1
-  //
-  // Wrapper for directly computing [r,g,b] values for a given factor f between
-  // 0 and 1
-  //
-  // Inputs:
-  //   f  factor determining color value as if 0 was min and 1 was max
-  // Outputs:
-  //   r  red value
-  //   g  green value
-  //   b  blue value)igl_Qu8mg5v7";
-const char *__doc_igl_per_corner_normals = R"igl_Qu8mg5v7(// Compute vertex normals via vertex position list, face list
-  // Inputs:
-  //   V  #V by 3 eigen Matrix of mesh vertex 3D positions
-  //   F  #F by 3 eigne Matrix of face (triangle) indices
-  //   corner_threshold  threshold in degrees on sharp angles
-  // Output:
-  //   CN  #F*3 by 3 eigen Matrix of mesh vertex 3D normals, where the normal
-  //     for corner F(i,j) is at CN(i*3+j,:) )igl_Qu8mg5v7";
-const char *__doc_igl_per_edge_normals = R"igl_Qu8mg5v7(// Compute face normals via vertex position list, face list
-  // Inputs:
-  //   V  #V by 3 eigen Matrix of mesh vertex 3D positions
-  //   F  #F by 3 eigen Matrix of face (triangle) indices
-  //   weight  weighting type
-  //   FN  #F by 3 matrix of 3D face normals per face
-  // Output:
-  //   N  #2 by 3 matrix of mesh edge 3D normals per row
-  //   E  #E by 2 matrix of edge indices per row
-  //   EMAP  #E by 1 matrix of indices from all edges to E
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_per_face_normals = R"igl_Qu8mg5v7(// Compute face normals via vertex position list, face list
-  // Inputs:
-  //   V  #V by 3 eigen Matrix of mesh vertex 3D positions
-  //   F  #F by 3 eigen Matrix of face (triangle) indices
-  //   Z  3 vector normal given to faces with degenerate normal.
-  // Output:
-  //   N  #F by 3 eigen Matrix of mesh face (triangle) 3D normals
-  //
-  // Example:
-  //   // Give degenerate faces (1/3,1/3,1/3)^0.5
-  //   per_face_normals(V,F,Vector3d(1,1,1).normalized(),N);)igl_Qu8mg5v7";
-const char *__doc_igl_per_face_normals_stable = R"igl_Qu8mg5v7(// Special version where order of face indices is guaranteed not to effect
-  // output.)igl_Qu8mg5v7";
-const char *__doc_igl_per_vertex_normals = R"igl_Qu8mg5v7(// Compute vertex normals via vertex position list, face list
-  // Inputs:
-  //   V  #V by 3 eigen Matrix of mesh vertex 3D positions
-  //   F  #F by 3 eigne Matrix of face (triangle) indices
-  //   weighting  Weighting type
-  // Output:
-  //   N  #V by 3 eigen Matrix of mesh vertex 3D normals)igl_Qu8mg5v7";
-const char *__doc_igl_planarize_quad_mesh = R"igl_Qu8mg5v7(// Inputs:
-  //   Vin        #V by 3 eigen Matrix of mesh vertex 3D positions
-  //   F          #F by 4 eigen Matrix of face (quad) indices
-  //   maxIter    maximum numbers of iterations
-  //   threshold  minimum allowed threshold for non-planarity
-  // Output:
-  //   Vout       #V by 3 eigen Matrix of planar mesh vertex 3D positions
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_png_readPNG = R"igl_Qu8mg5v7(// Read an image from a .png file into 4 memory buffers
-    //
-    // Input:
-    //  png_file  path to .png file
-    // Output:
-    //  R,G,B,A texture channels
-    // Returns true on success, false on failure
-    //)igl_Qu8mg5v7";
-const char *__doc_igl_png_writePNG = R"igl_Qu8mg5v7(// Writes an image to a png file
-    //
-    // Input:
-    //  R,G,B,A texture channels
-    // Output:
-    //  png_file  path to .png file
-    // Returns true on success, false on failure
-    //)igl_Qu8mg5v7";
-const char *__doc_igl_point_mesh_squared_distance = R"igl_Qu8mg5v7(// Compute distances from a set of points P to a triangle mesh (V,F)
-  //
-  // Inputs:
-  //   P  #P by 3 list of query point positions
-  //   V  #V by 3 list of vertex positions
-  //   Ele  #Ele by (3|2|1) list of (triangle|edge|point) indices
-  // Outputs:
-  //   sqrD  #P list of smallest squared distances
-  //   I  #P list of primitive indices corresponding to smallest distances
-  //   C  #P by 3 list of closest points
-  //
-  // Known bugs: This only computes distances to given primitivess. So
-  // unreferenced vertices are ignored. However, degenerate primitives are
-  // handled correctly: triangle [1 2 2] is treated as a segment [1 2], and
-  // triangle [1 1 1] is treated as a point. So one _could_ add extra
-  // combinatorially degenerate rows to Ele for all unreferenced vertices to
-  // also get distances to points.)igl_Qu8mg5v7";
-const char *__doc_igl_polar_svd = R"igl_Qu8mg5v7(// Computes the polar decomposition (R,T) of a matrix A using SVD singular
-  // value decomposition
-  //
-  // Inputs:
-  //   A  3 by 3 matrix to be decomposed
-  // Outputs:
-  //   R  3 by 3 rotation matrix part of decomposition (**always rotataion**)
-  //   T  3 by 3 stretch matrix part of decomposition
-  //   U  3 by 3 left-singular vectors
-  //   S  3 by 1 singular values
-  //   V  3 by 3 right-singular vectors
-  //
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_principal_curvature = R"igl_Qu8mg5v7(// Compute the principal curvature directions and magnitude of the given triangle mesh
-  //   DerivedV derived from vertex positions matrix type: i.e. MatrixXd
-  //   DerivedF derived from face indices matrix type: i.e. MatrixXi
-  // Inputs:
-  //   V       eigen matrix #V by 3
-  //   F       #F by 3 list of mesh faces (must be triangles)
-  //   radius  controls the size of the neighbourhood used, 1 = average edge length
-  //
-  // Outputs:
-  //   PD1 #V by 3 maximal curvature direction for each vertex.
-  //   PD2 #V by 3 minimal curvature direction for each vertex.
-  //   PV1 #V by 1 maximal curvature value for each vertex.
-  //   PV2 #V by 1 minimal curvature value for each vertex.
-  //
-  // See also: average_onto_faces, average_onto_vertices
-  //
-  // This function has been developed by: Nikolas De Giorgis, Luigi Rocca and Enrico Puppo.
-  // The algorithm is based on:
-  // Efficient Multi-scale Curvature and Crease Estimation
-  // Daniele Panozzo, Enrico Puppo, Luigi Rocca
-  // GraVisMa, 2010)igl_Qu8mg5v7";
-const char *__doc_igl_quad_planarity = R"igl_Qu8mg5v7(// Compute planarity of the faces of a quad mesh
-  // Inputs:
-  //   V  #V by 3 eigen Matrix of mesh vertex 3D positions
-  //   F  #F by 4 eigen Matrix of face (quad) indices
-  // Output:
-  //   P  #F by 1 eigen Matrix of mesh face (quad) planarities
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_randperm = R"igl_Qu8mg5v7(// Like matlab's randperm(n) but minus 1
-  //
-  // Inputs:
-  //   n  number of elements
-  // Outputs:
-  //   I  n list of rand permutation of 0:n-1)igl_Qu8mg5v7";
-const char *__doc_igl_readDMAT = R"igl_Qu8mg5v7(See readDMAT for the documentation.)igl_Qu8mg5v7";
-const char *__doc_igl_readMESH = R"igl_Qu8mg5v7(// load a tetrahedral volume mesh from a .mesh file
-  //
-  // Templates:
-  //   Scalar  type for positions and vectors (will be read as double and cast
-  //     to Scalar)
-  //   Index  type for indices (will be read as int and cast to Index)
-  // Input:
-  //   mesh_file_name  path of .mesh file
-  // Outputs:
-  //   V  double matrix of vertex positions  #V by 3
-  //   T  #T list of tet indices into vertex positions
-  //   F  #F list of face indices into vertex positions
-  //
-  // Known bugs: Holes and regions are not supported)igl_Qu8mg5v7";
-const char *__doc_igl_readOBJ = R"igl_Qu8mg5v7(// Read a mesh from an ascii obj file, filling in vertex positions, normals
-  // and texture coordinates. Mesh may have faces of any number of degree
-  //
-  // Templates:
-  //   Scalar  type for positions and vectors (will be read as double and cast
-  //     to Scalar)
-  //   Index  type for indices (will be read as int and cast to Index)
-  // Inputs:
-  //  str  path to .obj file
-  // Outputs:
-  //   V  double matrix of vertex positions  #V by 3
-  //   TC  double matrix of texture coordinats #TC by 2
-  //   N  double matrix of corner normals #N by 3
-  //   F  #F list of face indices into vertex positions
-  //   FTC  #F list of face indices into vertex texture coordinates
-  //   FN  #F list of face indices into vertex normals
-  // Returns true on success, false on errors)igl_Qu8mg5v7";
-const char *__doc_igl_readOFF = R"igl_Qu8mg5v7(// Read a mesh from an ascii OFF file, filling in vertex positions, normals
-  // and texture coordinates. Mesh may have faces of any number of degree
-  //
-  // Templates:
-  //   Scalar  type for positions and vectors (will be read as double and cast
-  //     to Scalar)
-  //   Index  type for indices (will be read as int and cast to Index)
-  // Inputs:
-  //  str  path to .obj file
-  // Outputs:
-  //   V  double matrix of vertex positions  #V by 3
-  //   F  #F list of face indices into vertex positions
-  //   N  list of vertex normals #V by 3
-  //   C  list of rgb color values per vertex #V by 3
-  // Returns true on success, false on errors)igl_Qu8mg5v7";
-const char *__doc_igl_readTGF = R"igl_Qu8mg5v7(// READTGF
-  //
-  // [V,E,P,BE,CE,PE] = readTGF(filename)
-  //
-  // Read a graph from a .tgf file
-  //
-  // Input:
-  //  filename  .tgf file name
-  // Output:
-  //  V  # vertices by 3 list of vertex positions
-  //  E  # edges by 2 list of edge indices
-  //  P  # point-handles list of point handle indices
-  //  BE # bone-edges by 2 list of bone-edge indices
-  //  CE # cage-edges by 2 list of cage-edge indices
-  //  PE # pseudo-edges by 2 list of pseudo-edge indices
-  //
-  // Assumes that graph vertices are 3 dimensional)igl_Qu8mg5v7";
-const char *__doc_igl_read_triangle_mesh = R"igl_Qu8mg5v7(// read mesh from an ascii file with automatic detection of file format.
-  // supported: obj, off, stl, wrl, ply, mesh)
-  //
-  // Templates:
-  //   Scalar  type for positions and vectors (will be read as double and cast
-  //     to Scalar)
-  //   Index  type for indices (will be read as int and cast to Index)
-  // Inputs:
-  //   str  path to file
-  // Outputs:
-  //   V  eigen double matrix #V by 3
-  //   F  eigen int matrix #F by 3
-  // Returns true iff success)igl_Qu8mg5v7";
-const char *__doc_igl_remove_duplicate_vertices = R"igl_Qu8mg5v7(// REMOVE_DUPLICATE_VERTICES Remove duplicate vertices upto a uniqueness
-  // tolerance (epsilon)
-  //
-  // Inputs:
-  //   V  #V by dim list of vertex positions
-  //   epsilon  uniqueness tolerance (significant digit), can probably think of
-  //     this as a tolerance on L1 distance
-  // Outputs:
-  //   SV  #SV by dim new list of vertex positions
-  //   SVI #V by 1 list of indices so SV = V(SVI,:)
-  //   SVJ #SV by 1 list of indices so V = SV(SVJ,:)
-  //
-  // Example:
-  //   % Mesh in (V,F)
-  //   [SV,SVI,SVJ] = remove_duplicate_vertices(V,1e-7);
-  //   % remap faces
-  //   SF = SVJ(F);
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_rotate_vectors = R"igl_Qu8mg5v7(// Rotate the vectors V by A radiants on the tangent plane spanned by B1 and
-  // B2
-  //
-  // Inputs:
-  //   V     #V by 3 eigen Matrix of vectors
-  //   A     #V eigen vector of rotation angles or a single angle to be applied
-  //     to all vectors
-  //   B1    #V by 3 eigen Matrix of base vector 1
-  //   B2    #V by 3 eigen Matrix of base vector 2
-  //
-  // Output:
-  //   Returns the rotated vectors
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_setdiff = R"igl_Qu8mg5v7(// Set difference of elements of matrices
-  //
-  // Inputs:
-  //   A  m-long vector of indices
-  //   B  n-long vector of indices
-  // Outputs:
-  //   C  (k<=m)-long vector of unique elements appearing in A but not in B
-  //   IA  (k<=m)-long list of indices into A so that C = A(IA)
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_shape_diameter_function = R"igl_Qu8mg5v7(// Compute shape diamater function per given point. In the parlence of the
-  // paper "Consistent Mesh Partitioning and Skeletonisation using the Shape
-  // Diameter Function" [Shapiro et al. 2008], this implementation uses a 180°
-  // cone and a _uniform_ average (_not_ a average weighted by inverse angles).
-  //
-  // Inputs:
-  //    shoot_ray  function handle that outputs hits of a given ray against a
-  //      mesh (embedded in function handles as captured variable/data)
-  //    P  #P by 3 list of origin points
-  //    N  #P by 3 list of origin normals
-  // Outputs:
-  //    S  #P list of shape diamater function values between bounding box
-  //    diagonal (perfect sphere) and 0 (perfect needle hook)
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_signed_distance = R"igl_Qu8mg5v7(// Computes signed distance to a mesh
-  //
-  // Inputs:
-  //   P  #P by 3 list of query point positions
-  //   V  #V by 3 list of vertex positions
-  //   F  #F by ss list of triangle indices, ss should be 3 unless sign_type ==
-  //     SIGNED_DISTANCE_TYPE_UNSIGNED
-  //   sign_type  method for computing distance _sign_ S
-  // Outputs:
-  //   S  #P list of smallest signed distances
-  //   I  #P list of facet indices corresponding to smallest distances
-  //   C  #P by 3 list of closest points
-  //   N  #P by 3 list of closest normals (only set if
-  //     sign_type=SIGNED_DISTANCE_TYPE_PSEUDONORMAL)
-  //
-  // Known bugs: This only computes distances to triangles. So unreferenced
-  // vertices and degenerate triangles are ignored.)igl_Qu8mg5v7";
-const char *__doc_igl_signed_distance_pseudonormal = R"igl_Qu8mg5v7(// Computes signed distance to mesh
-  //
-  // Inputs:
-  //   tree  AABB acceleration tree (see AABB.h)
-  //   F  #F by 3 list of triangle indices
-  //   FN  #F by 3 list of triangle normals
-  //   VN  #V by 3 list of vertex normals (ANGLE WEIGHTING)
-  //   EN  #E by 3 list of edge normals (UNIFORM WEIGHTING)
-  //   EMAP  #F*3 mapping edges in F to E
-  //   q  Query point
-  // Returns signed distance to mesh
-  //)igl_Qu8mg5v7";
-const char *__doc_igl_signed_distance_winding_number = R"igl_Qu8mg5v7(// Inputs:
-  //   tree  AABB acceleration tree (see cgal/point_mesh_squared_distance.h)
-  //   hier  Winding number evaluation hierarchy
-  //   q  Query point
-  // Returns signed distance to mesh)igl_Qu8mg5v7";
-const char *__doc_igl_slice = R"igl_Qu8mg5v7(// Act like the matlab X(row_indices,col_indices) operator, where
-  // row_indices, col_indices are non-negative integer indices.
-  //
-  // Inputs:
-  //   X  m by n matrix
-  //   R  list of row indices
-  //   C  list of column indices
-  // Output:
-  //   Y  #R by #C matrix
-  //
-  // See also: slice_mask)igl_Qu8mg5v7";
-const char *__doc_igl_slice_into = R"igl_Qu8mg5v7(// Act like the matlab Y(row_indices,col_indices) = X
-  //
-  // Inputs:
-  //   X  xm by xn rhs matrix
-  //   R  list of row indices
-  //   C  list of column indices
-  //   Y  ym by yn lhs matrix
-  // Output:
-  //   Y  ym by yn lhs matrix, same as input but Y(R,C) = X)igl_Qu8mg5v7";
-const char *__doc_igl_slice_mask = R"igl_Qu8mg5v7(// Act like the matlab X(row_mask,col_mask) operator, where
-  // row_mask, col_mask are non-negative integer indices.
-  //
-  // Inputs:
-  //   X  m by n matrix
-  //   R  m list of row bools
-  //   C  n list of column bools
-  // Output:
-  //   Y  #trues-in-R by #trues-in-C matrix
-  //
-  // See also: slice_mask)igl_Qu8mg5v7";
-const char *__doc_igl_marching_tets = R"igl_Qu8mg5v7(// SLICE_TETS Slice through a tet mesh (V,T) along a given plane (via its
-  // implicit equation).
-  //
-  // Inputs:
-  //   V  #V by 3 list of tet mesh vertices
-  //   T  #T by 4 list of tet indices into V
-  //   plane  list of 4 coefficients in the plane equation: [x y z 1]'*plane = 0
-  //   Optional:
-  //     'Manifold' followed by whether to stitch together triangles into a
-  //       manifold mesh {true}: results in more compact U but slightly slower.
-  // Outputs:
-  //   U  #U by 3 list of triangle mesh vertices along slice
-  //   G  #G by 3 list of triangles indices into U
-  //   J  #G list of indices into T revealing from which tet each faces comes
-  //   BC  #U by #V list of barycentric coordinates (or more generally: linear
-  //     interpolation coordinates) so that U = BC*V
-  // )igl_Qu8mg5v7";
-const char *__doc_igl_sortrows = R"igl_Qu8mg5v7(// Act like matlab's [Y,I] = sortrows(X)
-  //
-  // Templates:
-  //   DerivedX derived scalar type, e.g. MatrixXi or MatrixXd
-  //   DerivedI derived integer type, e.g. MatrixXi
-  // Inputs:
-  //   X  m by n matrix whose entries are to be sorted
-  //   ascending  sort ascending (true, matlab default) or descending (false)
-  // Outputs:
-  //   Y  m by n matrix whose entries are sorted (**should not** be same
-  //     reference as X)
-  //   I  m list of indices so that
-  //     Y = X(I,:);)igl_Qu8mg5v7";
-const char *__doc_igl_streamlines_init = R"igl_Qu8mg5v7(// Given a mesh and a field the function computes the /data/ necessary for tracing the field'
-    // streamlines, and creates the initial /state/ for the tracing.
-    // Inputs:
-    //   V             #V by 3 list of mesh vertex coordinates
-    //   F             #F by 3 list of mesh faces
-    //   temp_field    #F by 3n list of the 3D coordinates of the per-face vectors
-    //                    (n-degrees stacked horizontally for each triangle)
-    //   treat_as_symmetric
-    //              if true, adds n symmetry directions to the field (N = 2n). Else N = n
-    //   percentage    [0-1] percentage of faces sampled
-    // Outputs:
-    //   data          struct containing topology information of the mesh and field
-    //   state         struct containing the state of the tracing)igl_Qu8mg5v7";
-const char *__doc_igl_streamlines_next = R"igl_Qu8mg5v7(// The function computes the next state for each point in the sample
-    //   V             #V by 3 list of mesh vertex coordinates
-    //   F             #F by 3 list of mesh faces
-    //   data          struct containing topology information
-    //   state         struct containing the state of the tracing)igl_Qu8mg5v7";
-const char *__doc_igl_triangle_triangle_adjacency = R"igl_Qu8mg5v7(// Constructs the triangle-triangle adjacency matrix for a given
-  // mesh (V,F).
-  //
-  // Templates:
-  //   Scalar derived type of eigen matrix for V (e.g. derived from
-  //     MatrixXd)
-  //   Index  derived type of eigen matrix for F (e.g. derived from
-  //     MatrixXi)
-  // Inputs:
-  //   F  #F by simplex_size list of mesh faces (must be triangles)
-  // Outputs:
-  //   TT   #F by #3 adjacent matrix, the element i,j is the id of the triangle adjacent to the j edge of triangle i
-  //   TTi  #F by #3 adjacent matrix, the element i,j is the id of edge of the triangle TT(i,j) that is adjacent with triangle i
-  // NOTE: the first edge of a triangle is [0,1] the second [1,2] and the third [2,3].
-  //       this convention is DIFFERENT from cotmatrix_entries.h
-  // Known bug: this should not need to take V as input.)igl_Qu8mg5v7";
-const char *__doc_igl_triangle_triangle_adjacency_preprocess = R"igl_Qu8mg5v7(// Preprocessing)igl_Qu8mg5v7";
-const char *__doc_igl_triangle_triangle_adjacency_extractTT = R"igl_Qu8mg5v7(// Extract the face adjacencies)igl_Qu8mg5v7";
-const char *__doc_igl_triangle_triangle_adjacency_extractTTi = R"igl_Qu8mg5v7(// Extract the face adjacencies indices (needed for fast traversal))igl_Qu8mg5v7";
-const char *__doc_igl_triangle_triangulate = R"igl_Qu8mg5v7(// Triangulate the interior of a polygon using the triangle library.
-    //
-    // Inputs:
-    //   V #V by 2 list of 2D vertex positions
-    //   E #E by 2 list of vertex ids forming unoriented edges of the boundary of the polygon
-    //   H #H by 2 coordinates of points contained inside holes of the polygon
-    //   flags  string of options pass to triangle (see triangle documentation)
-    // Outputs:
-    //   V2  #V2 by 2  coordinates of the vertives of the generated triangulation
-    //   F2  #F2 by 3  list of indices forming the faces of the generated triangulation
-    //)igl_Qu8mg5v7";
-const char *__doc_igl_unique = R"igl_Qu8mg5v7(// Act like matlab's [C,IA,IC] = unique(X)
-  //
-  // Templates:
-  //   T  comparable type T
-  // Inputs:
-  //   A  #A vector of type T
-  // Outputs:
-  //   C  #C vector of unique entries in A
-  //   IA  #C index vector so that C = A(IA);
-  //   IC  #A index vector so that A = C(IC);)igl_Qu8mg5v7";
-const char *__doc_igl_unique_rows = R"igl_Qu8mg5v7(// Act like matlab's [C,IA,IC] = unique(X,'rows')
-  //
-  // Templates:
-  //   DerivedA derived scalar type, e.g. MatrixXi or MatrixXd
-  //   DerivedIA derived integer type, e.g. MatrixXi
-  //   DerivedIC derived integer type, e.g. MatrixXi
-  // Inputs:
-  //   A  m by n matrix whose entries are to unique'd according to rows
-  // Outputs:
-  //   C  #C vector of unique rows in A
-  //   IA  #C index vector so that C = A(IA,:);
-  //   IC  #A index vector so that A = C(IC,:);)igl_Qu8mg5v7";
-const char *__doc_igl_unproject_onto_mesh = R"igl_Qu8mg5v7(// Unproject a screen location (using current opengl viewport, projection, and
-  // model view) to a 3D position _onto_ a given mesh, if the ray through the
-  // given screen location (x,y) _hits_ the mesh.
-  //
-  // Inputs:
-  //    pos        screen space coordinates
-  //    model      model matrix
-  //    proj       projection matrix
-  //    viewport   vieweport vector
-  //    V   #V by 3 list of mesh vertex positions
-  //    F   #F by 3 list of mesh triangle indices into V
-  // Outputs:
-  //    fid  id of the first face hit
-  //    bc  barycentric coordinates of hit
-  // Returns true if there's a hit)igl_Qu8mg5v7";
-const char *__doc_igl_upsample = R"igl_Qu8mg5v7(// Subdivide without moving vertices: Given the triangle mesh [V, F],
-  // where n_verts = V.rows(), computes newV and a sparse matrix S s.t.
-  // [newV, newF] is the subdivided mesh where newV = S*V.
-  //
-  // Inputs:
-  //   n_verts  an integer (number of mesh vertices)
-  //   F  an m by 3 matrix of integers of triangle faces
-  // Outputs:
-  //   S  a sparse matrix (will become the subdivision matrix)
-  //   newF  a matrix containing the new faces)igl_Qu8mg5v7";
-const char *__doc_igl_winding_number = R"igl_Qu8mg5v7(// WINDING_NUMBER Compute the sum of solid angles of a triangle/tetrahedron
-  // described by points (vectors) V
-  //
-  // Templates:
-  //   dim  dimension of input
-  // Inputs:
-  //  V  n by 3 list of vertex positions
-  //  F  #F by 3 list of triangle indices, minimum index is 0
-  //  O  no by 3 list of origin positions
-  // Outputs:
-  //  S  no by 1 list of winding numbers
-  //
-  // 3d)igl_Qu8mg5v7";
-const char *__doc_igl_winding_number_3 = R"igl_Qu8mg5v7(// Inputs:
-  //   V  pointer to array containing #V by 3 vertex positions along rows,
-  //     given in column major order
-  //   n  number of mesh vertices
-  //   F  pointer to array containing #F by 3 face indices along rows,
-  //     given in column major order
-  //   m  number of faces
-  //   O  pointer to array containing #O by 3 query positions along rows,
-  //     given in column major order
-  //   no  number of origins
-  // Outputs:
-  //   S  no by 1 list of winding numbers)igl_Qu8mg5v7";
-const char *__doc_igl_winding_number_2 = R"igl_Qu8mg5v7(//// Only one evaluation origin
-  //template <typename DerivedF>
-  //IGL_INLINE void winding_number_3(
-  //  const double * V,
-  //  const int n,
-  //  const DerivedF * F,
-  //  const int m,
-  //  const double * O,
-  //  double * S);
-  // 2d)igl_Qu8mg5v7";
-const char *__doc_igl_writeMESH = R"igl_Qu8mg5v7(// save a tetrahedral volume mesh to a .mesh file
-  //
-  // Templates:
-  //   Scalar  type for positions and vectors (will be cast as double)
-  //   Index  type for indices (will be cast to int)
-  // Input:
-  //   mesh_file_name  path of .mesh file
-  //   V  double matrix of vertex positions  #V by 3
-  //   T  #T list of tet indices into vertex positions
-  //   F  #F list of face indices into vertex positions
-  //
-  // Known bugs: Holes and regions are not supported)igl_Qu8mg5v7";
-const char *__doc_igl_writeOBJ = R"igl_Qu8mg5v7(// Write a mesh in an ascii obj file
-  // Inputs:
-  //   str  path to outputfile
-  //   V  #V by 3 mesh vertex positions
-  //   F  #F by 3|4 mesh indices into V
-  //   CN #CN by 3 normal vectors
-  //   FN  #F by 3|4 corner normal indices into CN
-  //   TC  #TC by 2|3 texture coordinates
-  //   FTC #F by 3|4 corner texture coord indices into TC
-  // Returns true on success, false on error
-  //
-  // Known issues: Horrifyingly, this does not have the same order of
-  // parameters as readOBJ.)igl_Qu8mg5v7";
-const char *__doc_igl_writePLY = R"igl_Qu8mg5v7(// Write a mesh in an ascii ply file
-  // Inputs:
-  //   str  path to outputfile
-  //   V  #V by 3 mesh vertex positions
-  //   F  #F by 3 mesh indices into V
-  //   N  #V by 3 normal vectors
-  //   UV #V by 2 texture coordinates
-  // Returns true on success, false on error)igl_Qu8mg5v7";
-const char *__doc_igl_readPLY= R"igl_Qu8mg5v7(// Read a mesh from an ascii ply file, filling in vertex positions,
-  // mesh indices, normals and texture coordinates
-  // Inputs:
-  //  str path to .obj file
-  // Outputs:
-  //   V  double matrix of vertex positions  #V by 3
-  //   F  #F list of face indices into vertex positions
-  //   N  double matrix of corner normals #N by 3
-  //   UV #V by 2 texture coordinates
-  // Returns true on success, false on errors)igl_Qu8mg5v7";
-const char *__doc_igl_seam_edges=R"igl_Qu8mg5v7(// Finds all UV-space boundaries of a mesh.
-  //
-  // Inputs:
-  //   V  #V by dim list of positions of the input mesh.
-  //   TC  #TC by 2 list of 2D texture coordinates of the input mesh
-  //   F  #F by 3 list of triange indices into V representing a
-  //     manifold-with-boundary triangle mesh
-  //   FTC  #F by 3 list of indices into TC for each corner
-  // Outputs:
-  //   seams  Edges where the forwards and backwards directions have different
-  //     texture coordinates, as a #seams-by-4 matrix of indices. Each row is
-  //     organized as [ forward_face_index, forward_face_vertex_index,
-  //     backwards_face_index, backwards_face_vertex_index ] such that one side
-  //     of the seam is the edge:
-  //         F[ seams( i, 0 ), seams( i, 1 ) ], F[ seams( i, 0 ), (seams( i, 1 ) + 1) % 3 ]
-  //     and the other side is the edge:
-  //         F[ seams( i, 2 ), seams( i, 3 ) ], F[ seams( i, 2 ), (seams( i, 3 ) + 1) % 3 ]
-  //   boundaries  Edges with only one incident triangle, as a #boundaries-by-2
-  //     matrix of indices. Each row is organized as 
-  //         [ face_index, face_vertex_index ]
-  //     such that the edge is:
-  //         F[ boundaries( i, 0 ), boundaries( i, 1 ) ], F[ boundaries( i, 0 ), (boundaries( i, 1 ) + 1) % 3 ]
-  //   foldovers  Edges where the two incident triangles fold over each other
-  //     in UV-space, as a #foldovers-by-4 matrix of indices.
-  //     Each row is organized as [ forward_face_index, forward_face_vertex_index,
-  //     backwards_face_index, backwards_face_vertex_index ]
-  //     such that one side of the foldover is the edge:
-  //       F[ foldovers( i, 0 ), foldovers( i, 1 ) ], F[ foldovers( i, 0 ), (foldovers( i, 1 ) + 1) % 3 ]
-  //     and the other side is the edge:
-  //       F[ foldovers( i, 2 ), foldovers( i, 3 ) ], F[ foldovers( i, 2 ), (foldovers( i, 3 ) + 1) % 3 ])igl_Qu8mg5v7";

+ 0 - 132
python/py_doc.h

@@ -1,132 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-extern const char *__doc_igl_active_set;
-extern const char *__doc_igl_adjacency_list;
-extern const char *__doc_igl_arap_precomputation;
-extern const char *__doc_igl_arap_solve;
-extern const char *__doc_igl_avg_edge_length;
-extern const char *__doc_igl_barycenter;
-extern const char *__doc_igl_barycentric_coordinates;
-extern const char *__doc_igl_barycentric_to_global;
-extern const char *__doc_igl_bbw;
-extern const char *__doc_igl_boundary_conditions;
-extern const char *__doc_igl_boundary_facets;
-extern const char *__doc_igl_boundary_loop;
-extern const char *__doc_igl_cat;
-extern const char *__doc_igl_collapse_edge;
-extern const char *__doc_igl_colon;
-extern const char *__doc_igl_column_to_quats;
-extern const char *__doc_igl_comb_cross_field;
-extern const char *__doc_igl_comb_frame_field;
-extern const char *__doc_igl_compute_frame_field_bisectors;
-extern const char *__doc_igl_copyleft_cgal_mesh_boolean;
-extern const char *__doc_igl_copyleft_cgal_remesh_self_intersections;
-extern const char *__doc_igl_copyleft_comiso_miq;
-extern const char *__doc_igl_copyleft_comiso_nrosy;
-extern const char *__doc_igl_copyleft_marching_cubes;
-extern const char *__doc_igl_copyleft_swept_volume;
-extern const char *__doc_igl_copyleft_tetgen_tetrahedralize;
-extern const char *__doc_igl_cotmatrix;
-extern const char *__doc_igl_covariance_scatter_matrix;
-extern const char *__doc_igl_cross_field_mismatch;
-extern const char *__doc_igl_cut_mesh_from_singularities;
-extern const char *__doc_igl_deform_skeleton;
-extern const char *__doc_igl_directed_edge_orientations;
-extern const char *__doc_igl_directed_edge_parents;
-extern const char *__doc_igl_doublearea;
-extern const char *__doc_igl_doublearea_single;
-extern const char *__doc_igl_doublearea_quad;
-extern const char *__doc_igl_dqs;
-extern const char *__doc_igl_edge_lengths;
-extern const char *__doc_igl_edge_topology;
-extern const char *__doc_igl_eigs;
-extern const char *__doc_igl_embree_ambient_occlusion;
-extern const char *__doc_igl_embree_line_mesh_intersection;
-extern const char *__doc_igl_embree_reorient_facets_raycast;
-extern const char *__doc_igl_exact_geodesic;
-extern const char *__doc_igl_heat_geodesics_precompute;
-extern const char *__doc_igl_heat_geodesics_solve;
-extern const char *__doc_igl_find_cross_field_singularities;
-extern const char *__doc_igl_fit_rotations;
-extern const char *__doc_igl_fit_rotations_planar;
-extern const char *__doc_igl_fit_rotations_SSE;
-extern const char *__doc_igl_floor;
-extern const char *__doc_igl_forward_kinematics;
-extern const char *__doc_igl_gaussian_curvature;
-extern const char *__doc_igl_get_seconds;
-extern const char *__doc_igl_grad;
-extern const char *__doc_igl_harmonic;
-extern const char *__doc_igl_hsv_to_rgb;
-extern const char *__doc_igl_internal_angles;
-extern const char *__doc_igl_internal_angles_using_squared_edge_lengths;
-extern const char *__doc_igl_internal_angles_using_edge_lengths;
-extern const char *__doc_igl_invert_diag;
-extern const char *__doc_igl_is_irregular_vertex;
-extern const char *__doc_igl_jet;
-extern const char *__doc_igl_lbs_matrix;
-extern const char *__doc_igl_lbs_matrix_column;
-extern const char *__doc_igl_local_basis;
-extern const char *__doc_igl_lscm;
-extern const char *__doc_igl_map_vertices_to_circle;
-extern const char *__doc_igl_massmatrix;
-extern const char *__doc_igl_min_quad_with_fixed_precompute;
-extern const char *__doc_igl_min_quad_with_fixed_solve;
-extern const char *__doc_igl_min_quad_with_fixed;
-extern const char *__doc_igl_normalize_row_lengths;
-extern const char *__doc_igl_normalize_row_sums;
-extern const char *__doc_igl_parula;
-extern const char *__doc_igl_per_corner_normals;
-extern const char *__doc_igl_per_edge_normals;
-extern const char *__doc_igl_per_face_normals;
-extern const char *__doc_igl_per_face_normals_stable;
-extern const char *__doc_igl_per_vertex_normals;
-extern const char *__doc_igl_planarize_quad_mesh;
-extern const char *__doc_igl_png_readPNG;
-extern const char *__doc_igl_png_writePNG;
-extern const char *__doc_igl_point_mesh_squared_distance;
-extern const char *__doc_igl_polar_svd;
-extern const char *__doc_igl_principal_curvature;
-extern const char *__doc_igl_quad_planarity;
-extern const char *__doc_igl_randperm;
-extern const char *__doc_igl_readDMAT;
-extern const char *__doc_igl_readMESH;
-extern const char *__doc_igl_readOBJ;
-extern const char *__doc_igl_readOFF;
-extern const char *__doc_igl_readTGF;
-extern const char *__doc_igl_read_triangle_mesh;
-extern const char *__doc_igl_remove_duplicate_vertices;
-extern const char *__doc_igl_rotate_vectors;
-extern const char *__doc_igl_seam_edges;
-extern const char *__doc_igl_setdiff;
-extern const char *__doc_igl_shape_diameter_function;
-extern const char *__doc_igl_signed_distance;
-extern const char *__doc_igl_signed_distance_pseudonormal;
-extern const char *__doc_igl_signed_distance_winding_number;
-extern const char *__doc_igl_slice;
-extern const char *__doc_igl_slice_into;
-extern const char *__doc_igl_slice_mask;
-extern const char *__doc_igl_marching_tets;
-extern const char *__doc_igl_sortrows;
-extern const char *__doc_igl_streamlines_init;
-extern const char *__doc_igl_streamlines_next;
-extern const char *__doc_igl_triangle_triangle_adjacency;
-extern const char *__doc_igl_triangle_triangle_adjacency_preprocess;
-extern const char *__doc_igl_triangle_triangle_adjacency_extractTT;
-extern const char *__doc_igl_triangle_triangle_adjacency_extractTTi;
-extern const char *__doc_igl_triangle_triangulate;
-extern const char *__doc_igl_unique;
-extern const char *__doc_igl_unique_rows;
-extern const char *__doc_igl_unproject_onto_mesh;
-extern const char *__doc_igl_upsample;
-extern const char *__doc_igl_winding_number;
-extern const char *__doc_igl_winding_number_3;
-extern const char *__doc_igl_winding_number_2;
-extern const char *__doc_igl_writeMESH;
-extern const char *__doc_igl_writeOBJ;
-extern const char *__doc_igl_writePLY;
-extern const char *__doc_igl_readPLY;

+ 0 - 208
python/py_igl.cpp

@@ -1,208 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-#include <Eigen/Dense>
-
-#include "python_shared.h"
-
-
-#include <igl/AABB.h>
-#include <igl/ARAPEnergyType.h>
-#include <igl/MeshBooleanType.h>
-#include <igl/SolverStatus.h>
-#include <igl/active_set.h>
-#include <igl/adjacency_list.h>
-#include <igl/adjacency_matrix.h>
-#include <igl/arap.h>
-#include <igl/avg_edge_length.h>
-#include <igl/barycenter.h>
-#include <igl/barycentric_coordinates.h>
-#include <igl/barycentric_to_global.h>
-#include <igl/bbw.h>
-#include <igl/boundary_conditions.h>
-#include <igl/boundary_facets.h>
-#include <igl/boundary_loop.h>
-#include <igl/cat.h>
-#include <igl/collapse_edge.h>
-#include <igl/colon.h>
-#include <igl/column_to_quats.h>
-#include <igl/comb_cross_field.h>
-#include <igl/comb_frame_field.h>
-#include <igl/compute_frame_field_bisectors.h>
-#include <igl/cotmatrix.h>
-#include <igl/covariance_scatter_matrix.h>
-#include <igl/cross_field_mismatch.h>
-#include <igl/cut_mesh_from_singularities.h>
-#include <igl/deform_skeleton.h>
-#include <igl/directed_edge_orientations.h>
-#include <igl/directed_edge_parents.h>
-#include <igl/doublearea.h>
-#include <igl/dqs.h>
-#include <igl/edge_lengths.h>
-#include <igl/edge_topology.h>
-#include <igl/eigs.h>
-#include <igl/exact_geodesic.h>
-#include <igl/heat_geodesics.h>
-#include <igl/find_cross_field_singularities.h>
-#include <igl/fit_rotations.h>
-#include <igl/floor.h>
-#include <igl/forward_kinematics.h>
-#include <igl/gaussian_curvature.h>
-#include <igl/get_seconds.h>
-#include <igl/grad.h>
-#include <igl/harmonic.h>
-#include <igl/hsv_to_rgb.h>
-#include <igl/internal_angles.h>
-#include <igl/invert_diag.h>
-#include <igl/is_irregular_vertex.h>
-#include <igl/jet.h>
-#include <igl/lbs_matrix.h>
-#include <igl/local_basis.h>
-#include <igl/lscm.h>
-#include <igl/map_vertices_to_circle.h>
-#include <igl/massmatrix.h>
-#include <igl/min_quad_with_fixed.h>
-#include <igl/normalize_row_lengths.h>
-#include <igl/normalize_row_sums.h>
-#include <igl/parula.h>
-#include <igl/per_corner_normals.h>
-#include <igl/per_edge_normals.h>
-#include <igl/per_face_normals.h>
-#include <igl/per_vertex_normals.h>
-#include <igl/planarize_quad_mesh.h>
-#include <igl/point_mesh_squared_distance.h>
-#include <igl/polar_svd.h>
-#include <igl/principal_curvature.h>
-#include <igl/quad_planarity.h>
-#include <igl/randperm.h>
-#include <igl/readDMAT.h>
-#include <igl/readMESH.h>
-#include <igl/readOBJ.h>
-#include <igl/readOFF.h>
-#include <igl/readTGF.h>
-#include <igl/read_triangle_mesh.h>
-#include <igl/remove_duplicate_vertices.h>
-#include <igl/rotate_vectors.h>
-#include <igl/setdiff.h>
-#include <igl/shape_diameter_function.h>
-#include <igl/signed_distance.h>
-#include <igl/slice.h>
-#include <igl/slice_into.h>
-#include <igl/slice_mask.h>
-#include <igl/marching_tets.h>
-#include <igl/sortrows.h>
-#include <igl/triangle_triangle_adjacency.h>
-#include <igl/unique.h>
-#include <igl/unproject_onto_mesh.h>
-#include <igl/upsample.h>
-#include <igl/winding_number.h>
-#include <igl/writeMESH.h>
-#include <igl/writeOBJ.h>
-#include <igl/writePLY.h>
-#include <igl/readPLY.h>
-#include <igl/seam_edges.h>
-
-void python_export_igl(py::module &m)
-{
-#include "modules/py_typedefs.cpp"
-
-#include "py_igl/py_AABB.cpp"
-#include "py_igl/py_ARAPEnergyType.cpp"
-#include "py_igl/py_MeshBooleanType.cpp"
-#include "py_igl/py_SolverStatus.cpp"
-#include "py_igl/py_active_set.cpp"
-#include "py_igl/py_adjacency_list.cpp"
-#include "py_igl/py_adjacency_matrix.cpp"
-#include "py_igl/py_arap.cpp"
-#include "py_igl/py_avg_edge_length.cpp"
-#include "py_igl/py_barycenter.cpp"
-#include "py_igl/py_barycentric_coordinates.cpp"
-#include "py_igl/py_barycentric_to_global.cpp"
-#include "py_igl/py_bbw.cpp"
-#include "py_igl/py_boundary_conditions.cpp"
-#include "py_igl/py_boundary_facets.cpp"
-#include "py_igl/py_boundary_loop.cpp"
-#include "py_igl/py_cat.cpp"
-#include "py_igl/py_collapse_edge.cpp"
-#include "py_igl/py_colon.cpp"
-#include "py_igl/py_column_to_quats.cpp"
-#include "py_igl/py_comb_cross_field.cpp"
-#include "py_igl/py_comb_frame_field.cpp"
-#include "py_igl/py_compute_frame_field_bisectors.cpp"
-#include "py_igl/py_cotmatrix.cpp"
-#include "py_igl/py_covariance_scatter_matrix.cpp"
-#include "py_igl/py_cross_field_mismatch.cpp"
-#include "py_igl/py_cut_mesh_from_singularities.cpp"
-#include "py_igl/py_deform_skeleton.cpp"
-#include "py_igl/py_directed_edge_orientations.cpp"
-#include "py_igl/py_directed_edge_parents.cpp"
-#include "py_igl/py_doublearea.cpp"
-#include "py_igl/py_dqs.cpp"
-#include "py_igl/py_edge_lengths.cpp"
-#include "py_igl/py_edge_topology.cpp"
-#include "py_igl/py_eigs.cpp"
-#include "py_igl/py_exact_geodesic.cpp"
-#include "py_igl/py_heat_geodesics.cpp"
-#include "py_igl/py_find_cross_field_singularities.cpp"
-#include "py_igl/py_fit_rotations.cpp"
-#include "py_igl/py_floor.cpp"
-#include "py_igl/py_forward_kinematics.cpp"
-#include "py_igl/py_gaussian_curvature.cpp"
-#include "py_igl/py_get_seconds.cpp"
-#include "py_igl/py_grad.cpp"
-#include "py_igl/py_harmonic.cpp"
-#include "py_igl/py_hsv_to_rgb.cpp"
-#include "py_igl/py_internal_angles.cpp"
-#include "py_igl/py_invert_diag.cpp"
-#include "py_igl/py_is_irregular_vertex.cpp"
-#include "py_igl/py_jet.cpp"
-#include "py_igl/py_lbs_matrix.cpp"
-#include "py_igl/py_local_basis.cpp"
-#include "py_igl/py_lscm.cpp"
-#include "py_igl/py_map_vertices_to_circle.cpp"
-#include "py_igl/py_massmatrix.cpp"
-#include "py_igl/py_min_quad_with_fixed.cpp"
-#include "py_igl/py_normalize_row_lengths.cpp"
-#include "py_igl/py_normalize_row_sums.cpp"
-#include "py_igl/py_parula.cpp"
-#include "py_igl/py_per_corner_normals.cpp"
-#include "py_igl/py_per_edge_normals.cpp"
-#include "py_igl/py_per_face_normals.cpp"
-#include "py_igl/py_per_vertex_normals.cpp"
-#include "py_igl/py_planarize_quad_mesh.cpp"
-#include "py_igl/py_point_mesh_squared_distance.cpp"
-#include "py_igl/py_polar_svd.cpp"
-#include "py_igl/py_principal_curvature.cpp"
-#include "py_igl/py_quad_planarity.cpp"
-#include "py_igl/py_randperm.cpp"
-#include "py_igl/py_readDMAT.cpp"
-#include "py_igl/py_readMESH.cpp"
-#include "py_igl/py_readOBJ.cpp"
-#include "py_igl/py_readOFF.cpp"
-#include "py_igl/py_readTGF.cpp"
-#include "py_igl/py_read_triangle_mesh.cpp"
-#include "py_igl/py_remove_duplicate_vertices.cpp"
-#include "py_igl/py_rotate_vectors.cpp"
-#include "py_igl/py_setdiff.cpp"
-#include "py_igl/py_shape_diameter_function.cpp"
-#include "py_igl/py_signed_distance.cpp"
-#include "py_igl/py_slice.cpp"
-#include "py_igl/py_slice_into.cpp"
-#include "py_igl/py_slice_mask.cpp"
-#include "py_igl/py_marching_tets.cpp"
-#include "py_igl/py_sortrows.cpp"
-#include "py_igl/py_triangle_triangle_adjacency.cpp"
-#include "py_igl/py_unique.cpp"
-#include "py_igl/py_unproject_onto_mesh.cpp"
-#include "py_igl/py_upsample.cpp"
-#include "py_igl/py_winding_number.cpp"
-#include "py_igl/py_writeMESH.cpp"
-#include "py_igl/py_writeOBJ.cpp"
-#include "py_igl/py_writePLY.cpp"
-#include "py_igl/py_readPLY.cpp"
-#include "py_igl/py_seam_edges.cpp"
-}

+ 0 - 21
python/py_igl/copyleft/cgal/py_RemeshSelfIntersectionsParam.cpp

@@ -1,21 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-py::class_<igl::copyleft::cgal::RemeshSelfIntersectionsParam > RemeshSelfIntersectionsParam(m, "RemeshSelfIntersectionsParam");
-
-RemeshSelfIntersectionsParam
-.def("__init__", [](igl::copyleft::cgal::RemeshSelfIntersectionsParam &m)
-{
-    new (&m) igl::copyleft::cgal::RemeshSelfIntersectionsParam();
-    m.detect_only = false;
-    m.first_only = false;
-    m.stitch_all = false;
-})
-.def_readwrite("detect_only", &igl::copyleft::cgal::RemeshSelfIntersectionsParam::detect_only)
-.def_readwrite("first_only", &igl::copyleft::cgal::RemeshSelfIntersectionsParam::first_only)
-.def_readwrite("stitch_all", &igl::copyleft::cgal::RemeshSelfIntersectionsParam::stitch_all)
-;

+ 0 - 114
python/py_igl/copyleft/cgal/py_mesh_boolean.cpp

@@ -1,114 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-// COMPLETE BINDINGS ========================
-
-m.def("mesh_boolean", []
-(
-  const Eigen::MatrixXd& VA,
-  const Eigen::MatrixXi& FA,
-  const Eigen::MatrixXd& VB,
-  const Eigen::MatrixXi& FB,
-  igl::MeshBooleanType & type,
-  Eigen::MatrixXd& VC,
-  Eigen::MatrixXi& FC,
-  Eigen::MatrixXi& J
-)
-{
-  return igl::copyleft::cgal::mesh_boolean(VA, FA, VB, FB, type, VC, FC, J);
-}, __doc_igl_copyleft_cgal_mesh_boolean,
-py::arg("VA"), py::arg("FA"), py::arg("VB"), py::arg("FB"), py::arg("type"), py::arg("VC"), py::arg("FC"), py::arg("J"));
-
-
-m.def("mesh_boolean", []
-(
-  const Eigen::MatrixXd& VA,
-  const Eigen::MatrixXi& FA,
-  const Eigen::MatrixXd& VB,
-  const Eigen::MatrixXi& FB,
-  const std::string & type_str,
-  Eigen::MatrixXd& VC,
-  Eigen::MatrixXi& FC,
-  Eigen::MatrixXi& J
-)
-{
-  return igl::copyleft::cgal::mesh_boolean(VA, FA, VB, FB, type_str, VC, FC, J);
-}, __doc_igl_copyleft_cgal_mesh_boolean,
-py::arg("VA"), py::arg("FA"), py::arg("VB"), py::arg("FB"), py::arg("type_str"), py::arg("VC"), py::arg("FC"), py::arg("J"));
-
-m.def("mesh_boolean", []
-(
-  const Eigen::MatrixXd& VA,
-  const Eigen::MatrixXi& FA,
-  const Eigen::MatrixXd& VB,
-  const Eigen::MatrixXi& FB,
-  const igl::MeshBooleanType & type,
-  Eigen::MatrixXd& VC,
-  Eigen::MatrixXi& FC
-)
-{
-  return igl::copyleft::cgal::mesh_boolean(VA, FA, VB, FB, type, VC, FC);
-}, __doc_igl_copyleft_cgal_mesh_boolean,
-py::arg("VA"), py::arg("FA"), py::arg("VB"), py::arg("FB"), py::arg("type"), py::arg("VC"), py::arg("FC"));
-
-
-
-// INCOMPLETE BINDINGS ========================
-
-
-
-
-//m.def("mesh_boolean", []
-//(
-//  const Eigen::MatrixXd& VA,
-//  const Eigen::MatrixXd& FA,
-//  const Eigen::MatrixXd& VB,
-//  const Eigen::MatrixXd& FB,
-//  std::function<int (const Eigen::Matrix<int, 1, Eigen::Dynamic>)> & wind_num_op,
-//  std::function<int (const int, const int)> & keep,
-//  Eigen::MatrixXd& VC,
-//  Eigen::MatrixXd& FC,
-//  Eigen::MatrixXd& J
-//)
-//{
-//  return igl::copyleft::cgal::mesh_boolean(VA, FA, VB, FB, wind_num_op, keep, VC, FC, J);
-//}, __doc_igl_copyleft_cgal_mesh_boolean,
-//py::arg("VA"), py::arg("FA"), py::arg("VB"), py::arg("FB"), py::arg("wind_num_op"), py::arg("keep"), py::arg("VC"), py::arg("FC"), py::arg("J"));
-
-//m.def("mesh_boolean", []
-//(
-//  std::vector<DerivedV> & Vlist,
-//  std::vector<DerivedF> & Flist,
-//  std::function<int (const Eigen::Matrix<int, 1, Eigen::Dynamic>)> & wind_num_op,
-//  std::function<int (const int, const int)> & keep,
-//  Eigen::MatrixXd& VC,
-//  Eigen::MatrixXd& FC,
-//  Eigen::MatrixXd& J
-//)
-//{
-//  return igl::copyleft::cgal::mesh_boolean(Vlist, Flist, wind_num_op, keep, VC, FC, J);
-//}, __doc_igl_copyleft_cgal_mesh_boolean,
-//py::arg("Vlist"), py::arg("Flist"), py::arg("wind_num_op"), py::arg("keep"), py::arg("VC"), py::arg("FC"), py::arg("J"));
-
-//m.def("mesh_boolean", []
-//(
-//  const Eigen::MatrixXd& VV,
-//  const Eigen::MatrixXd& FF,
-//  const Eigen::MatrixXd& sizes,
-//  std::function<int (const Eigen::Matrix<int, 1, Eigen::Dynamic>)> & wind_num_op,
-//  std::function<int (const int, const int)> & keep,
-//  Eigen::MatrixXd& VC,
-//  Eigen::MatrixXd& FC,
-//  Eigen::MatrixXd& J
-//)
-//{
-//  return igl::copyleft::cgal::mesh_boolean(VV, FF, sizes, wind_num_op, keep, VC, FC, J);
-//}, __doc_igl_copyleft_cgal_mesh_boolean,
-//py::arg("VV"), py::arg("FF"), py::arg("sizes"), py::arg("wind_num_op"), py::arg("keep"), py::arg("VC"), py::arg("FC"), py::arg("J"));
-
-
-

+ 0 - 29
python/py_igl/copyleft/cgal/py_remesh_self_intersections.cpp

@@ -1,29 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("remesh_self_intersections", []
-(
-	const Eigen::MatrixXd& V,	
-	const Eigen::MatrixXi& F,
-	const igl::copyleft::cgal::RemeshSelfIntersectionsParam& params,
-	Eigen::MatrixXd& VV,
-	Eigen::MatrixXi& FF,
-	Eigen::MatrixXi& IF,
-	Eigen::MatrixXi& J,
-	Eigen::MatrixXi& IM
-)
-{
-	assert_is_VectorX("J", J);
-	assert_is_VectorX("IM", IM);
-	Eigen::VectorXi Jt;
-	Eigen::VectorXi IMt;
-	igl::copyleft::cgal::remesh_self_intersections(V, F, params, VV, FF, IF, Jt, IMt);
-	J = Jt;
-	IM = IMt;
-}, __doc_igl_copyleft_cgal_remesh_self_intersections,
-py::arg("V"), py::arg("F"), py::arg("params"), py::arg("VV")
-, py::arg("FF"), py::arg("IF"), py::arg("J"), py::arg("IM")); 

+ 0 - 63
python/py_igl/copyleft/comiso/py_miq.cpp

@@ -1,63 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("miq", []
-(
-  const Eigen::MatrixXd &V,
-  const Eigen::MatrixXi &F,
-  const Eigen::MatrixXd &PD1,
-  const Eigen::MatrixXd &PD2,
-  Eigen::MatrixXd &UV,
-  Eigen::MatrixXi &FUV,
-  double scale,
-  double stiffness,
-  bool directRound,
-  int iter,
-  int localIter,
-  bool doRound,
-  bool singularityRound
-)
-{
-  std::vector<int> roundVertices;
-  std::vector<std::vector<int> > hardFeatures;
-
-  igl::copyleft::comiso::miq(V, F, PD1, PD2, UV, FUV, scale, stiffness, directRound, iter, localIter, doRound, singularityRound, roundVertices, hardFeatures);
-}, __doc_igl_copyleft_comiso_miq,
-py::arg("V"), py::arg("F"), py::arg("PD1"), py::arg("PD2"), py::arg("UV"), py::arg("FUV"), py::arg("scale") = 30.0, py::arg("stiffness") = 5.0, py::arg("directRound") = false, py::arg("iter") = 5, py::arg("localIter") = 5, py::arg("doRound") = true, py::arg("singularityRound") = true
-);
-
-m.def("miq", []
-(
-  const Eigen::MatrixXd &V,
-  const Eigen::MatrixXi &F,
-  const Eigen::MatrixXd &PD1_combed,
-  const Eigen::MatrixXd &PD2_combed,
-  const Eigen::MatrixXi &mismatch,
-  const Eigen::MatrixXi &singular,
-  const Eigen::MatrixXi &seams,
-  Eigen::MatrixXd &UV,
-  Eigen::MatrixXi &FUV,
-  double gradientSize,
-  double stiffness,
-  bool directRound,
-  int iter,
-  int localIter,
-  bool doRound,
-  bool singularityRound
-)
-{
-  assert_is_VectorX("singular",singular);
-
-  std::vector<int> roundVertices;
-  std::vector<std::vector<int> > hardFeatures;
-
-  igl::copyleft::comiso::miq(V, F, PD1_combed, PD2_combed, mismatch, singular, seams, UV, FUV, gradientSize, stiffness, directRound, iter, localIter, doRound, singularityRound, roundVertices, hardFeatures);
-}, __doc_igl_copyleft_comiso_miq,
-py::arg("V"), py::arg("F"), py::arg("PD1_combed"), py::arg("PD2_combed"),
-py::arg("mismatch"), py::arg("singular"), py::arg("seams"),
-py::arg("UV"), py::arg("FUV"), py::arg("gradientSize") = 30.0, py::arg("stiffness") = 5.0, py::arg("directRound") = false, py::arg("iter") = 5, py::arg("localIter") = 5, py::arg("doRound") = true, py::arg("singularityRound") = true
-);

+ 0 - 67
python/py_igl/copyleft/comiso/py_nrosy.cpp

@@ -1,67 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("nrosy", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXi& b,
-  const Eigen::MatrixXd& bc,
-  const Eigen::MatrixXi& b_soft,
-  const Eigen::MatrixXd& w_soft,
-  const Eigen::MatrixXd& bc_soft,
-  const int N,
-  const double soft,
-  Eigen::MatrixXd& R,
-  Eigen::MatrixXd& S
-)
-{
-  assert_is_VectorX("b",b);
-  assert_is_VectorX("b_soft",b_soft);
-  assert_is_VectorX("w_soft",w_soft);
-
-  Eigen::VectorXi bt;
-  if (b.size() != 0)
-    bt = b;
-
-  Eigen::VectorXi b_softt;
-  if (b_soft.size() != 0)
-    b_softt = b_soft;
-
-  Eigen::VectorXd w_softt;
-  if (w_soft.size() != 0)
-    w_softt = w_soft;
-
-  Eigen::VectorXd St;
-  igl::copyleft::comiso::nrosy(V,F,bt,bc,b_softt,w_softt,bc_soft,N,soft,R,St);
-  S = St;
-
-}, __doc_igl_copyleft_comiso_nrosy,
-py::arg("V"), py::arg("F"), py::arg("b"), py::arg("bc"), py::arg("b_soft"), py::arg("w_soft"), py::arg("bc_soft"), py::arg("N"), py::arg("soft"), py::arg("R"), py::arg("S"));
-
-m.def("nrosy", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXi& b,
-  const Eigen::MatrixXd& bc,
-  const int N,
-  Eigen::MatrixXd& R,
-  Eigen::MatrixXd& S
-)
-{
-  assert_is_VectorX("b",b);
-
-  Eigen::VectorXi bt;
-  if (b.size() != 0)
-    bt = b;
-
-  Eigen::VectorXd St;
-  igl::copyleft::comiso::nrosy(V,F,bt,bc,N,R,St);
-  S = St;
-}, __doc_igl_copyleft_comiso_nrosy,
-py::arg("V"), py::arg("F"), py::arg("b"), py::arg("bc"), py::arg("N"), py::arg("R"), py::arg("S"));

+ 0 - 28
python/py_igl/copyleft/py_marching_cubes.cpp

@@ -1,28 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("marching_cubes", []
-(
-  const Eigen::MatrixXd& values,
-  const Eigen::MatrixXd& points,
-  const unsigned int x_res,
-  const unsigned int y_res,
-  const unsigned int z_res,
-  Eigen::MatrixXd& vertices,
-  Eigen::MatrixXi& faces
-)
-{
-  assert_is_VectorX("values", values);
-  Eigen::VectorXd valuesv;
-  if (values.size() != 0)
-    valuesv = values;
-  return igl::copyleft::marching_cubes(valuesv, points, x_res, y_res, z_res, vertices, faces);
-}, __doc_igl_copyleft_marching_cubes,
-py::arg("values"), py::arg("points"), py::arg("x_res"), py::arg("y_res"), py::arg("z_res"), py::arg("vertices"), py::arg("faces"));
-

+ 0 - 26
python/py_igl/copyleft/py_swept_volume.cpp

@@ -1,26 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-m.def("swept_volume", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const std::function<Eigen::Affine3d (const double)> & transform,
-  const size_t steps,
-  const size_t grid_res,
-  const size_t isolevel,
-  Eigen::MatrixXd& SV,
-  Eigen::MatrixXi& SF
-)
-{
-  return igl::copyleft::swept_volume(V, F, transform, steps, grid_res, isolevel, SV, SF);
-}, __doc_igl_copyleft_swept_volume,
-py::arg("V"), py::arg("F"), py::arg("transform"), py::arg("steps"), py::arg("grid_res"), py::arg("isolevel"), py::arg("SV"), py::arg("SF"));
-
-
-

+ 0 - 39
python/py_igl/copyleft/tetgen/py_tetrahedralize.cpp

@@ -1,39 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-m.def("tetrahedralize", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const std::string switches,
-  Eigen::MatrixXd& TV,
-  Eigen::MatrixXi& TT,
-  Eigen::MatrixXi& TF
-)
-{
-  return igl::copyleft::tetgen::tetrahedralize(V, F, switches, TV, TT, TF);
-}, __doc_igl_copyleft_tetgen_tetrahedralize,
-py::arg("V"), py::arg("F"), py::arg("switches"), py::arg("TV"), py::arg("TT"), py::arg("TF"));
-
-m.def("tetrahedralize", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXi& VM,
-  const Eigen::MatrixXi& FM,
-  const std::string switches,
-  Eigen::MatrixXd& TV,
-  Eigen::MatrixXi& TT,
-  Eigen::MatrixXi& TF,
-  Eigen::MatrixXi& TM
-)
-{
-  return igl::copyleft::tetgen::tetrahedralize(V, F, VM, FM, switches, TV, TT, TF, TM);
-}, __doc_igl_copyleft_tetgen_tetrahedralize,
-py::arg("V"), py::arg("F"), py::arg("VM"), py::arg("FM"), py::arg("switches"), py::arg("TV"), py::arg("TT"), py::arg("TF"), py::arg("TM"));
-

+ 0 - 23
python/py_igl/embree/py_ambient_occlusion.cpp

@@ -1,23 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("ambient_occlusion", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXd& P,
-  const Eigen::MatrixXd& N,
-  const int num_samples,
-  Eigen::MatrixXd& S
-)
-{
-  return igl::embree::ambient_occlusion(V, F, P, N, num_samples, S);
-}, __doc_igl_embree_ambient_occlusion,
-py::arg("V"), py::arg("F"), py::arg("P"), py::arg("N"), py::arg("num_samples"), py::arg("S"));
-

+ 0 - 20
python/py_igl/embree/py_line_mesh_intersection.cpp

@@ -1,20 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("line_mesh_intersection", []
-(
-  const Eigen::MatrixXd& V_source,
-  const Eigen::MatrixXd& N_source,
-  const Eigen::MatrixXd& V_target,
-  const Eigen::MatrixXi& F_target
-)
-{
-  return igl::embree::line_mesh_intersection(V_source, N_source, V_target, F_target);
-}, __doc_igl_embree_line_mesh_intersection,
-py::arg("V_source"), py::arg("N_source"), py::arg("V_target"), py::arg("F_target"));

+ 0 - 44
python/py_igl/embree/py_reorient_facets_raycast.cpp

@@ -1,44 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("reorient_facets_raycast", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  int rays_total,
-  int rays_minimum,
-  bool facet_wise,
-  bool use_parity,
-  bool is_verbose,
-  Eigen::MatrixXi& I,
-  Eigen::MatrixXi& C
-)
-{
-  Eigen::VectorXi Iv;
-  Eigen::VectorXi Cv;
-  igl::embree::reorient_facets_raycast(V, F, rays_total, rays_minimum, facet_wise, use_parity, is_verbose, Iv, Cv);
-  I = Iv;
-  C = Cv;
-}, __doc_igl_embree_reorient_facets_raycast,
-py::arg("V"), py::arg("F"), py::arg("rays_total"), py::arg("rays_minimum"), py::arg("facet_wise"), py::arg("use_parity"), py::arg("is_verbose"), py::arg("I"), py::arg("C"));
-
-m.def("reorient_facets_raycast", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXi& FF,
-  Eigen::MatrixXi& I
-)
-{
-  Eigen::VectorXi Iv;
-  igl::embree::reorient_facets_raycast(V, F, FF, Iv);
-  I = Iv;
-}, __doc_igl_embree_reorient_facets_raycast,
-py::arg("V"), py::arg("F"), py::arg("FF"), py::arg("I"));
-

+ 0 - 21
python/py_igl/png/py_readPNG.cpp

@@ -1,21 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-m.def("readPNG", []
-(
-  const std::string png_file,
-  Eigen::Matrix<unsigned char, Eigen::Dynamic, Eigen::Dynamic> & R,
-  Eigen::Matrix<unsigned char, Eigen::Dynamic, Eigen::Dynamic> & G,
-  Eigen::Matrix<unsigned char, Eigen::Dynamic, Eigen::Dynamic> & B,
-  Eigen::Matrix<unsigned char, Eigen::Dynamic, Eigen::Dynamic> & A
-)
-{
-  return igl::png::readPNG(png_file, R, G, B, A);
-}, __doc_igl_png_readPNG,
-py::arg("png_file"), py::arg("R"), py::arg("G"), py::arg("B"), py::arg("A"));
-

+ 0 - 22
python/py_igl/png/py_writePNG.cpp

@@ -1,22 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("writePNG", []
-(
-  const Eigen::Matrix<unsigned char, Eigen::Dynamic, Eigen::Dynamic> & R,
-  const Eigen::Matrix<unsigned char, Eigen::Dynamic, Eigen::Dynamic> & G,
-  const Eigen::Matrix<unsigned char, Eigen::Dynamic, Eigen::Dynamic> & B,
-  const Eigen::Matrix<unsigned char, Eigen::Dynamic, Eigen::Dynamic> & A,
-  const std::string png_file
-)
-{
-  return igl::png::writePNG(R, G, B, A, png_file);
-}, __doc_igl_png_writePNG,
-py::arg("R"), py::arg("G"), py::arg("B"), py::arg("A"), py::arg("png_file"));
-

+ 0 - 21
python/py_igl/py_AABB.cpp

@@ -1,21 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-py::class_<igl::AABB<Eigen::MatrixXd,3> > AABB(m, "AABB");
-
-AABB
-.def(py::init<>())
-.def(py::init<const igl::AABB<Eigen::MatrixXd,3>& >())
-.def("init",[](igl::AABB<Eigen::MatrixXd,3>& tree, const Eigen::MatrixXd& V, const Eigen::MatrixXi& Ele)
-{
-    return tree.init(V, Ele, Eigen::Matrix<double, Eigen::Dynamic, 3>(), Eigen::Matrix<double, Eigen::Dynamic, 3>(), Eigen::VectorXi(), 0); 
-})
-.def("squared_distance", [](const igl::AABB<Eigen::MatrixXd,3>& tree, const Eigen::MatrixXd& V, const Eigen::MatrixXi& Ele, const Eigen::MatrixXd& P, Eigen::MatrixXd& sqrD, Eigen::MatrixXi& I, Eigen::MatrixXd& C)
-{
-    return tree.squared_distance(V, Ele, P, sqrD, I, C);
-})
-;

+ 0 - 14
python/py_igl/py_ARAPEnergyType.cpp

@@ -1,14 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-py::enum_<igl::ARAPEnergyType>(m, "ARAPEnergyType")
-    .value("ARAP_ENERGY_TYPE_SPOKES", igl::ARAP_ENERGY_TYPE_SPOKES)
-    .value("ARAP_ENERGY_TYPE_SPOKES_AND_RIMS", igl::ARAP_ENERGY_TYPE_SPOKES_AND_RIMS)
-    .value("ARAP_ENERGY_TYPE_ELEMENTS", igl::ARAP_ENERGY_TYPE_ELEMENTS)
-    .value("ARAP_ENERGY_TYPE_DEFAULT", igl::ARAP_ENERGY_TYPE_DEFAULT)
-    .value("NUM_ARAP_ENERGY_TYPES", igl::NUM_ARAP_ENERGY_TYPES)
-    .export_values();

+ 0 - 17
python/py_igl/py_MeshBooleanType.cpp

@@ -1,17 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-py::enum_<igl::MeshBooleanType>(m, "MeshBooleanType")
-    .value("MESH_BOOLEAN_TYPE_UNION", igl::MESH_BOOLEAN_TYPE_UNION)
-    .value("MESH_BOOLEAN_TYPE_INTERSECT", igl::MESH_BOOLEAN_TYPE_INTERSECT)
-    .value("MESH_BOOLEAN_TYPE_MINUS", igl::MESH_BOOLEAN_TYPE_MINUS)
-    .value("MESH_BOOLEAN_TYPE_XOR", igl::MESH_BOOLEAN_TYPE_XOR)
-    .value("MESH_BOOLEAN_TYPE_RESOLVE", igl::MESH_BOOLEAN_TYPE_RESOLVE)
-    .value("NUM_MESH_BOOLEAN_TYPES", igl::NUM_MESH_BOOLEAN_TYPES)
-    .export_values();
-
-

+ 0 - 13
python/py_igl/py_SolverStatus.cpp

@@ -1,13 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-py::enum_<igl::SolverStatus>(m, "SolverStatus")
-    .value("SOLVER_STATUS_CONVERGED", igl::SOLVER_STATUS_CONVERGED)
-    .value("SOLVER_STATUS_MAX_ITER", igl::SOLVER_STATUS_MAX_ITER)
-    .value("SOLVER_STATUS_ERROR", igl::SOLVER_STATUS_ERROR)
-    .value("NUM_SOLVER_STATUSES", igl::NUM_SOLVER_STATUSES)
-    .export_values();

+ 0 - 55
python/py_igl/py_active_set.cpp

@@ -1,55 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-// Wrap the params struct
-py::class_<igl::active_set_params > active_set_params(m, "active_set_params");
-
-active_set_params
-.def("__init__", [](igl::active_set_params &m)
-{
-    new (&m) igl::active_set_params();
-    m.Auu_pd = false;
-    m.max_iter = 100;
-    m.inactive_threshold = igl::DOUBLE_EPS;
-    m.constraint_threshold = igl::DOUBLE_EPS;
-    m.solution_diff_threshold = igl::DOUBLE_EPS;
-})
-.def_readwrite("Auu_pd", &igl::active_set_params::Auu_pd)
-.def_readwrite("max_iter", &igl::active_set_params::max_iter)
-.def_readwrite("inactive_threshold", &igl::active_set_params::inactive_threshold)
-.def_readwrite("constraint_threshold", &igl::active_set_params::constraint_threshold)
-.def_readwrite("solution_diff_threshold", &igl::active_set_params::solution_diff_threshold)
-.def_readwrite("Auu_pd", &igl::active_set_params::Auu_pd)
-;
-
-m.def("active_set", []
-(
-  const Eigen::SparseMatrix<double>& A,
-  const Eigen::MatrixXd& B,
-  const Eigen::MatrixXi& known,
-  const Eigen::MatrixXd& Y,
-  const Eigen::SparseMatrix<double>& Aeq,
-  const Eigen::MatrixXd& Beq,
-  const Eigen::SparseMatrix<double>& Aieq,
-  const Eigen::MatrixXd& Bieq,
-  const Eigen::MatrixXd& lx,
-  const Eigen::MatrixXd& ux,
-  const igl::active_set_params& params,
-  Eigen::MatrixXd& Z
-)
-{
-  assert_is_VectorX("B",B);
-  assert_is_VectorX("known",known);
-  assert_is_VectorX("Y",Y);
-  assert_is_VectorX("Beq",Beq);
-  assert_is_VectorX("Bieq",Bieq);
-  assert_is_VectorX("Z",Z);
-
-  return igl::active_set(A,B,known,Y,Aeq,Eigen::VectorXd(Beq),Aieq,Bieq,lx,ux,params,Z);
-}, __doc_igl_active_set,
-py::arg("A"), py::arg("B"), py::arg("known"), py::arg("Y"), py::arg("Aeq"), py::arg("Beq")
-, py::arg("Aieq"), py::arg("Bieq"), py::arg("lx"), py::arg("ux"), py::arg("params"), py::arg("Z"));

+ 0 - 10
python/py_igl/py_adjacency_list.cpp

@@ -1,10 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("adjacency_list", [](const Eigen::MatrixXi& F, std::vector<std::vector<int>>& A, bool sorted) {
-    igl::adjacency_list(F, A, sorted);
-}, py::arg("F"), py::arg("A"), py::arg("sorted")=false);

+ 0 - 10
python/py_igl/py_adjacency_matrix.cpp

@@ -1,10 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("adjacency_matrix", [](const Eigen::MatrixXi & F, Eigen::SparseMatrix<int>& A) {
-    igl::adjacency_matrix(F, A);
-}, py::arg("F"), py::arg("A"));

+ 0 - 68
python/py_igl/py_arap.cpp

@@ -1,68 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-py::class_<igl::ARAPData> ARAPData(m, "ARAPData");
-
-ARAPData
-.def(py::init<>())
-.def_readwrite("n", &igl::ARAPData::n)
-.def_readwrite("energy", &igl::ARAPData::energy)
-.def_property("G",
-[](const igl::ARAPData& data) {return Eigen::MatrixXi(data.G);},
-[](igl::ARAPData& data, const Eigen::MatrixXi& G)
-{
-  assert_is_VectorX("G",G);
-  data.G = Eigen::VectorXi(G.cast<int>());
-})
-.def_readwrite("with_dynamics", &igl::ARAPData::with_dynamics)
-.def_readwrite("f_ext", &igl::ARAPData::f_ext)
-.def_readwrite("h", &igl::ARAPData::h)
-.def_readwrite("vel", &igl::ARAPData::vel)
-.def_readwrite("ym", &igl::ARAPData::ym)
-.def_readwrite("max_iter", &igl::ARAPData::max_iter)
-.def_readwrite("K", &igl::ARAPData::K)
-.def_readwrite("M", &igl::ARAPData::M)
-.def_readwrite("CSM", &igl::ARAPData::CSM)
-// .def_readwrite("solver_data", &igl::ARAPData::solver_data)
-.def_readwrite("dim", &igl::ARAPData::dim)
-.def_property("b",
-[](const igl::ARAPData& data) {return Eigen::MatrixXi(data.b);},
-[](igl::ARAPData& data, const Eigen::MatrixXi& b)
-{
-  assert_is_VectorX("b",b);
-  data.b = Eigen::VectorXi(b.cast<int>());
-})
-;
-
-m.def("arap_precomputation", []
-(
-  const Eigen::MatrixXd & V,
-  const Eigen::MatrixXi & F,
-  const int dim,
-  const Eigen::MatrixXi& b,
-  igl::ARAPData & data
-)
-{
-  assert_is_VectorX("b",b);
-  Eigen::VectorXi bt;
-  if (b.size() != 0)
-    bt = b;
-
-  return igl::arap_precomputation(V,F,dim,bt,data);
-}, __doc_igl_arap_precomputation,
-py::arg("V"), py::arg("F"), py::arg("dim"), py::arg("b"), py::arg("data"));
-
-m.def("arap_solve", []
-(
-  const Eigen::MatrixXd & bc,
-  igl::ARAPData & data,
-  Eigen::MatrixXd& U
-)
-{
-  return igl::arap_solve(bc,data,U);
-}, __doc_igl_arap_solve,
-py::arg("bc"), py::arg("data"), py::arg("U"));

+ 0 - 16
python/py_igl/py_avg_edge_length.cpp

@@ -1,16 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("avg_edge_length", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F
-)
-{
-  return igl::avg_edge_length(V,F);
-}, __doc_igl_avg_edge_length,
-py::arg("V"), py::arg("F"));

+ 0 - 17
python/py_igl/py_barycenter.cpp

@@ -1,17 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("barycenter", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXd& BC
-)
-{
-  return igl::barycenter(V,F,BC);
-}, __doc_igl_barycenter,
-py::arg("V"), py::arg("F"), py::arg("BC"));

+ 0 - 36
python/py_igl/py_barycentric_coordinates.cpp

@@ -1,36 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("barycentric_coordinates", []
-(
-  const Eigen::MatrixXd& P,
-  const Eigen::MatrixXd& A,
-  const Eigen::MatrixXd& B,
-  const Eigen::MatrixXd& C,
-  const Eigen::MatrixXd& D,
-  Eigen::MatrixXd& L
-)
-{
-  return igl::barycentric_coordinates(P, A, B, C, D, L);
-}, __doc_igl_barycentric_coordinates,
-py::arg("P"), py::arg("A"), py::arg("B"), py::arg("C"), py::arg("D"), py::arg("L"));
-
-m.def("barycentric_coordinates", []
-(
-  const Eigen::MatrixXd& P,
-  const Eigen::MatrixXd& A,
-  const Eigen::MatrixXd& B,
-  const Eigen::MatrixXd& C,
-  Eigen::MatrixXd& L
-)
-{
-  return igl::barycentric_coordinates(P, A, B, C, L);
-}, __doc_igl_barycentric_coordinates,
-py::arg("P"), py::arg("A"), py::arg("B"), py::arg("C"), py::arg("L"));
-

+ 0 - 19
python/py_igl/py_barycentric_to_global.cpp

@@ -1,19 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("barycentric_to_global", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXd& bc
-)
-{
-  return igl::barycentric_to_global(V, F, bc);
-}, __doc_igl_barycentric_to_global,
-py::arg("V"), py::arg("F"), py::arg("bc"));

+ 0 - 40
python/py_igl/py_bbw.cpp

@@ -1,40 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-// Wrap the BBWData class
-py::class_<igl::BBWData > BBWData(m, "BBWData");
-
-BBWData
-.def(py::init<>())
-.def_readwrite("partition_unity", &igl::BBWData::partition_unity)
-.def_readwrite("W0", &igl::BBWData::W0)
-.def_readwrite("active_set_params", &igl::BBWData::active_set_params)
-.def_readwrite("verbosity", &igl::BBWData::verbosity)
-
-.def("print", [](igl::BBWData& data)
-{
-    return data.print();
-})
-;
-
-m.def("bbw", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& Ele,
-  const Eigen::MatrixXi& b,
-  const Eigen::MatrixXd& bc,
-  igl::BBWData& data,
-  Eigen::MatrixXd& W
-)
-{
-  assert_is_VectorX("b",b);
-  Eigen::VectorXi bv;
-  if (b.size() != 0)
-    bv = b;
-  return igl::bbw(V, Ele, bv, bc, data, W);
-}, __doc_igl_bbw,
-py::arg("V"), py::arg("Ele"), py::arg("b"), py::arg("bc"), py::arg("data"), py::arg("W"));

+ 0 - 31
python/py_igl/py_boundary_conditions.cpp

@@ -1,31 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("boundary_conditions", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& Ele,
-  const Eigen::MatrixXd& C,
-  const Eigen::MatrixXi& P,
-  const Eigen::MatrixXi& BE,
-  const Eigen::MatrixXi& CE,
-  Eigen::MatrixXi& b,
-  Eigen::MatrixXd& bc
-)
-{
-  assert_is_VectorX("P", P);
-  Eigen::VectorXi Pv;
-  if (P.size() != 0)
-    Pv = P;
-  Eigen::VectorXi bv;
-  igl::boundary_conditions(V, Ele, C, Pv, BE, CE, bv, bc);
-  b = bv;
-}, __doc_igl_boundary_conditions,
-py::arg("V"), py::arg("Ele"), py::arg("C"), py::arg("P"), py::arg("BE"), py::arg("CE"), py::arg("b"), py::arg("bc"));
-

+ 0 - 37
python/py_igl/py_boundary_facets.cpp

@@ -1,37 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("boundary_facets", []
-(
-  const Eigen::MatrixXi& T,
-  Eigen::MatrixXi& F
-)
-{
-  return igl::boundary_facets(T,F);
-}, __doc_igl_boundary_facets,
-py::arg("T"), py::arg("F"));
-
-m.def("boundary_facets", []
-(
-  const Eigen::MatrixXi& T
-)
-{
-  Eigen::MatrixXi F;
-  igl::boundary_facets(T,F);
-  return F;
-}, __doc_igl_boundary_facets,
-py::arg("T"));
-
-m.def("boundary_facets", []
-(
-  const std::vector<std::vector<int> > & T,
-  std::vector<std::vector<int> > & F
-)
-{
-  return igl::boundary_facets(T,F);
-}, __doc_igl_boundary_facets,
-py::arg("T"), py::arg("F"));

+ 0 - 40
python/py_igl/py_boundary_loop.cpp

@@ -1,40 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("boundary_loop", []
-(
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXi& L
-)
-{
-  Eigen::VectorXi T;
-  igl::boundary_loop(F,T);
-  L = T;
-}, __doc_igl_boundary_loop,
-py::arg("F"), py::arg("L"));
-
-m.def("boundary_loop", []
-(
-  const Eigen::MatrixXi& F,
-  std::vector<std::vector<int> >& L
-)
-{
-  return igl::boundary_loop(F,L);
-}, __doc_igl_boundary_loop,
-py::arg("F"), py::arg("L"));
-
-m.def("boundary_loop", []
-(
-  const Eigen::MatrixXi& F,
-  std::vector<int>& L
-)
-{
-  return igl::boundary_loop(F,L);
-}, __doc_igl_boundary_loop,
-py::arg("F"), py::arg("L"));
-
-

+ 0 - 63
python/py_igl/py_cat.cpp

@@ -1,63 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("cat", []
-(
-  const int dim,
-  const Eigen::MatrixXd& A,
-  const Eigen::MatrixXd& B,
-  Eigen::MatrixXd& C
-)
-{
-  return igl::cat(dim, A, B, C);
-}, __doc_igl_cat,
-py::arg("dim"), py::arg("A"), py::arg("B"), py::arg("C"));
-
-m.def("cat", []
-(
-  const int dim,
-  Eigen::MatrixXd& A,
-  Eigen::MatrixXd& B
-)
-{
-  return igl::cat(dim, A, B);
-}, __doc_igl_cat,
-py::arg("dim"), py::arg("A"), py::arg("B"));
-
-m.def("cat", []
-(
-  const int dim,
-  Eigen::MatrixXi& A,
-  Eigen::MatrixXi& B
-)
-{
-  return igl::cat(dim, A, B);
-}, __doc_igl_cat,
-py::arg("dim"), py::arg("A"), py::arg("B"));
-
-//m.def("cat", []
-//(
-//  const std::vector<std::vector<Eigen::MatrixXd > > & A, 
-//  Eigen::MatrixXd & C
-//)
-//{
-//  return igl::cat(A, C);
-//}, __doc_igl_cat,
-//py::arg("A"), py::arg("C"));
-
-m.def("cat", []
-(
-  const int dim,
-  const Eigen::SparseMatrix<double>& A,
-  const Eigen::SparseMatrix<double>& B,
-  Eigen::SparseMatrix<double>& C
-)
-{
-  return igl::cat(dim, A, B, C);
-}, __doc_igl_cat,
-py::arg("dim"), py::arg("A"), py::arg("B"), py::arg("C"));
-

+ 0 - 94
python/py_igl/py_collapse_edge.cpp

@@ -1,94 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-// COMPLETE BINDINGS ========================
-
-
-
-
-
-
-// INCOMPLETE BINDINGS ========================
-
-
-//m.def("collapse_edge", []
-//(
-//  int e,
-//  Eigen::RowVectorXd & p,
-//  Eigen::MatrixXd& V,
-//  Eigen::MatrixXi& F,
-//  Eigen::MatrixXi& E,
-//  Eigen::MatrixXi& EMAP,
-//  Eigen::MatrixXi& EF,
-//  Eigen::MatrixXi& EI,
-//  int & e1,
-//  int & e2,
-//  int & f1,
-//  int & f2
-//)
-//{
-//  return igl::collapse_edge(e, p, V, F, E, EMAP, EF, EI, e1, e2, f1, f2);
-//}, __doc_igl_collapse_edge,
-//py::arg("e"), py::arg("p"), py::arg("V"), py::arg("F"), py::arg("E"), py::arg("EMAP"), py::arg("EF"), py::arg("EI"), py::arg("e1"), py::arg("e2"), py::arg("f1"), py::arg("f2"));
-
-//m.def("collapse_edge", []
-//(
-//  int e,
-//  Eigen::RowVectorXd & p,
-//  Eigen::MatrixXd& V,
-//  Eigen::MatrixXi& F,
-//  Eigen::MatrixXi& E,
-//  Eigen::MatrixXi& EMAP,
-//  Eigen::MatrixXi& EF,
-//  Eigen::MatrixXi& EI
-//)
-//{
-//  return igl::collapse_edge(e, p, V, F, E, EMAP, EF, EI);
-//}, __doc_igl_collapse_edge,
-//py::arg("e"), py::arg("p"), py::arg("V"), py::arg("F"), py::arg("E"), py::arg("EMAP"), py::arg("EF"), py::arg("EI"));
-
-//m.def("collapse_edge", []
-//(
-//  std::function<void (const int, const Eigen::MatrixXd &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, const Eigen::VectorXi &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, double &, Eigen::RowVectorXd &)> & cost_and_placement,
-//  Eigen::MatrixXd& V,
-//  Eigen::MatrixXi& F,
-//  Eigen::MatrixXi& E,
-//  Eigen::MatrixXi& EMAP,
-//  Eigen::MatrixXi& EF,
-//  Eigen::MatrixXi& EI,
-//  std::set<std::pair<double, int> > & Q,
-//  std::vector<std::set<std::pair<double, int> >::iterator> & Qit,
-//  Eigen::MatrixXd& C
-//)
-//{
-//  return igl::collapse_edge(cost_and_placement, V, F, E, EMAP, EF, EI, Q, Qit, C);
-//}, __doc_igl_collapse_edge,
-//py::arg("cost_and_placement"), py::arg("V"), py::arg("F"), py::arg("E"), py::arg("EMAP"), py::arg("EF"), py::arg("EI"), py::arg("Q"), py::arg("Qit"), py::arg("C"));
-
-//m.def("collapse_edge", []
-//(
-//  std::function<void (const int, const Eigen::MatrixXd &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, const Eigen::VectorXi &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, double &, Eigen::RowVectorXd &)> & cost_and_placement,
-//  Eigen::MatrixXd& V,
-//  Eigen::MatrixXi& F,
-//  Eigen::MatrixXi& E,
-//  Eigen::MatrixXi& EMAP,
-//  Eigen::MatrixXi& EF,
-//  Eigen::MatrixXi& EI,
-//  std::set<std::pair<double, int> > & Q,
-//  std::vector<std::set<std::pair<double, int> >::iterator> & Qit,
-//  Eigen::MatrixXd& C,
-//  int & e,
-//  int & e1,
-//  int & e2,
-//  int & f1,
-//  int & f2
-//)
-//{
-//  return igl::collapse_edge(cost_and_placement, V, F, E, EMAP, EF, EI, Q, Qit, C, e, e1, e2, f1, f2);
-//}, __doc_igl_collapse_edge,
-//py::arg("cost_and_placement"), py::arg("V"), py::arg("F"), py::arg("E"), py::arg("EMAP"), py::arg("EF"), py::arg("EI"), py::arg("Q"), py::arg("Qit"), py::arg("C"), py::arg("e"), py::arg("e1"), py::arg("e2"), py::arg("f1"), py::arg("f2"));
-

+ 0 - 81
python/py_igl/py_colon.cpp

@@ -1,81 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("colon", []
-(
-  const double low,
-  const double step,
-  const double high,
-  Eigen::MatrixXd& I
-)
-{
-  Eigen::Matrix<double,Eigen::Dynamic,1> temp;
-  igl::colon<double>(low,step,high,temp);
-  I = temp;
-}, __doc_igl_colon,
-py::arg("low"), py::arg("step"), py::arg("high"), py::arg("I"));
-
-m.def("colon", []
-(
-  const double low,
-  const double high,
-  Eigen::MatrixXd& I
-)
-{
-  Eigen::Matrix<double,Eigen::Dynamic,1> temp;
-  igl::colon<double>(low,high,temp);
-  I = temp;
-}, __doc_igl_colon,
-py::arg("low"), py::arg("high"), py::arg("I"));
-
-m.def("colon", []
-(
-  const double& low,
-  const double& high
-)
-{
-  return Eigen::MatrixXd(igl::colon<double>(low,high));
-}, __doc_igl_colon,
-py::arg("low"), py::arg("high"));
-
-
-m.def("coloni", []
-(
-  const int low,
-  const int step,
-  const int high,
-  Eigen::MatrixXi& I
-)
-{
-  Eigen::Matrix<int,Eigen::Dynamic,1> temp;
-  igl::colon<int>(low,step,high,temp);
-  I = temp;
-}, __doc_igl_colon,
-py::arg("low"), py::arg("step"), py::arg("high"), py::arg("I"));
-
-m.def("coloni", []
-(
-  const int low,
-  const int high,
-  Eigen::MatrixXi& I
-)
-{
-  Eigen::Matrix<int,Eigen::Dynamic,1> temp;
-  igl::colon<int>(low,high,temp);
-  I = temp;
-}, __doc_igl_colon,
-py::arg("low"), py::arg("high"), py::arg("I"));
-
-m.def("coloni", []
-(
-  const int& low,
-  const int& high
-)
-{
-  return Eigen::MatrixXi(igl::colon<int>(low,high));
-}, __doc_igl_colon,
-py::arg("low"), py::arg("high"));

+ 0 - 17
python/py_igl/py_column_to_quats.cpp

@@ -1,17 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("column_to_quats", []
-(
-  const Eigen::MatrixXd& Q,
-  RotationList& vQ
-)
-{
-  return igl::column_to_quats(Q, vQ);
-}, __doc_igl_column_to_quats,
-py::arg("Q"), py::arg("vQ"));
-

+ 0 - 20
python/py_igl/py_comb_cross_field.cpp

@@ -1,20 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("comb_cross_field", []
-(
-  const Eigen::MatrixXd &V,
-  const Eigen::MatrixXi &F,
-  const Eigen::MatrixXd &PD1in,
-  const Eigen::MatrixXd &PD2in,
-  Eigen::MatrixXd &PD1out,
-  Eigen::MatrixXd &PD2out
-)
-{
-  return igl::comb_cross_field(V,F,PD1in,PD2in,PD1out,PD2out);
-}, __doc_igl_comb_cross_field,
-py::arg("V"), py::arg("F"), py::arg("PD1in"), py::arg("PD2in"), py::arg("PD1out"), py::arg("PD2out"));

+ 0 - 22
python/py_igl/py_comb_frame_field.cpp

@@ -1,22 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("comb_frame_field", []
-(
-  const Eigen::MatrixXd &V,
-  const Eigen::MatrixXi &F,
-  const Eigen::MatrixXd &PD1,
-  const Eigen::MatrixXd &PD2,
-  const Eigen::MatrixXd &BIS1_combed,
-  const Eigen::MatrixXd &BIS2_combed,
-  Eigen::MatrixXd &PD1_combed,
-  Eigen::MatrixXd &PD2_combed
-)
-{
-  return igl::comb_frame_field(V,F,PD1,PD2,BIS1_combed,BIS2_combed,PD1_combed,PD2_combed);
-}, __doc_igl_comb_frame_field,
-py::arg("V"), py::arg("F"), py::arg("PD1"), py::arg("PD2"), py::arg("BIS1_combed"), py::arg("BIS2_combed"), py::arg("PD1_combed"), py::arg("PD2_combed"));

+ 0 - 36
python/py_igl/py_compute_frame_field_bisectors.cpp

@@ -1,36 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("compute_frame_field_bisectors", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXd& B1,
-  const Eigen::MatrixXd& B2,
-  const Eigen::MatrixXd& PD1,
-  const Eigen::MatrixXd& PD2,
-  Eigen::MatrixXd& BIS1,
-  Eigen::MatrixXd& BIS2
-)
-{
-  return igl::compute_frame_field_bisectors(V,F,B1,B2,PD1,PD2,BIS1,BIS2);
-}, __doc_igl_compute_frame_field_bisectors,
-py::arg("V"), py::arg("F"), py::arg("B1"), py::arg("B2"), py::arg("PD1"), py::arg("PD2"), py::arg("BIS1"), py::arg("BIS2"));
-
-m.def("compute_frame_field_bisectors", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXd& PD1,
-  const Eigen::MatrixXd& PD2,
-  Eigen::MatrixXd& BIS1,
-  Eigen::MatrixXd& BIS2
-)
-{
-  return igl::compute_frame_field_bisectors(V,F,PD1,PD2,BIS1,BIS2);
-}, __doc_igl_compute_frame_field_bisectors,
-py::arg("V"), py::arg("F"), py::arg("PD1"), py::arg("PD2"), py::arg("BIS1"), py::arg("BIS2"));

+ 0 - 17
python/py_igl/py_cotmatrix.cpp

@@ -1,17 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("cotmatrix", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::SparseMatrix<double>& L
-)
-{
-  return igl::cotmatrix(V,F,L);
-}, __doc_igl_cotmatrix,
-py::arg("V"), py::arg("F"), py::arg("L"));

+ 0 - 18
python/py_igl/py_covariance_scatter_matrix.cpp

@@ -1,18 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("covariance_scatter_matrix", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const igl::ARAPEnergyType energy,
-  Eigen::SparseMatrix<double>& CSM
-)
-{
-  return igl::covariance_scatter_matrix(V,F,energy,CSM);
-}, __doc_igl_covariance_scatter_matrix,
-py::arg("V"), py::arg("F"), py::arg("energy"), py::arg("CSM"));

+ 0 - 20
python/py_igl/py_cross_field_mismatch.cpp

@@ -1,20 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("cross_field_mismatch", []
-(
-  const Eigen::MatrixXd &V,
-  const Eigen::MatrixXi &F,
-  const Eigen::MatrixXd &PD1,
-  const Eigen::MatrixXd &PD2,
-  const bool isCombed,
-  Eigen::MatrixXi &mismatch
-)
-{
-  return igl::cross_field_mismatch(V,F,PD1,PD2,isCombed,mismatch);
-}, __doc_igl_cross_field_mismatch,
-py::arg("V"), py::arg("F"), py::arg("PD1"), py::arg("PD2"), py::arg("isCombed"), py::arg("mismatch"));

+ 0 - 18
python/py_igl/py_cut_mesh_from_singularities.cpp

@@ -1,18 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("cut_mesh_from_singularities", []
-(
-  const Eigen::MatrixXd &V,
-  const Eigen::MatrixXi &F,
-  const Eigen::MatrixXi &MMatch,
-  Eigen::MatrixXi &seams
-)
-{
-  return igl::cut_mesh_from_singularities(V,F,MMatch,seams);
-}, __doc_igl_cut_mesh_from_singularities,
-py::arg("V"), py::arg("F"), py::arg("mismatch"), py::arg("seams"));

+ 0 - 43
python/py_igl/py_deform_skeleton.cpp

@@ -1,43 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-// COMPLETE BINDINGS ========================
-
-
-m.def("deform_skeleton", []
-(
-  const Eigen::MatrixXd& C,
-  const Eigen::MatrixXi& BE,
-  const Eigen::MatrixXd& T,
-  Eigen::MatrixXd& CT,
-  Eigen::MatrixXi& BET
-)
-{
-  return igl::deform_skeleton(C, BE, T, CT, BET);
-}, __doc_igl_deform_skeleton,
-py::arg("C"), py::arg("BE"), py::arg("T"), py::arg("CT"), py::arg("BET"));
-
-
-
-
-
-// INCOMPLETE BINDINGS ========================
-
-
-//m.def("deform_skeleton", []
-//(
-//  const Eigen::MatrixXd& C,
-//  const Eigen::MatrixXi& BE,
-//  std::vector<Eigen::Affine3d, Eigen::aligned_allocator<Eigen::Affine3d> > & vA,
-//  Eigen::MatrixXd& CT,
-//  Eigen::MatrixXi& BET
-//)
-//{
-//  return igl::deform_skeleton(C, BE, vA, CT, BET);
-//}, __doc_igl_deform_skeleton,
-//py::arg("C"), py::arg("BE"), py::arg("vA"), py::arg("CT"), py::arg("BET"));
-

+ 0 - 19
python/py_igl/py_directed_edge_orientations.cpp

@@ -1,19 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-m.def("directed_edge_orientations", []
-(
-  const Eigen::MatrixXd& C,
-  const Eigen::MatrixXi& E,
-  RotationList& Q
-)
-{
-  return igl::directed_edge_orientations(C, E, Q);
-}, __doc_igl_directed_edge_orientations,
-py::arg("C"), py::arg("E"), py::arg("Q"));
-

+ 0 - 21
python/py_igl/py_directed_edge_parents.cpp

@@ -1,21 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("directed_edge_parents", []
-(
-  const Eigen::MatrixXi& E,
-  Eigen::MatrixXi& P
-)
-{
-  Eigen::VectorXi Pv;
-  igl::directed_edge_parents(E, Pv);
-  P = Pv;
-}, __doc_igl_directed_edge_parents,
-py::arg("E"), py::arg("P"));
-

+ 0 - 61
python/py_igl/py_doublearea.cpp

@@ -1,61 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("doublearea", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXd& dblA
-)
-{
-  return igl::doublearea(V,F,dblA);
-}, __doc_igl_doublearea,
-py::arg("V"), py::arg("F"), py::arg("dblA"));
-
-m.def("doublearea", []
-(
-  const Eigen::MatrixXd& A,
-  const Eigen::MatrixXd& B,
-  const Eigen::MatrixXd& C,
-  Eigen::MatrixXd& D
-)
-{
-  return igl::doublearea(A,B,C,D);
-}, __doc_igl_doublearea,
-py::arg("A"), py::arg("B"), py::arg("C"), py::arg("D"));
-
-m.def("doublearea_single", []
-(
-  const Eigen::MatrixXd& A,
-  const Eigen::MatrixXd& B,
-  const Eigen::MatrixXd& C
-)
-{
-  return igl::doublearea_single(A,B,C);
-}, __doc_igl_doublearea_single,
-py::arg("A"), py::arg("B"), py::arg("C"));
-
-m.def("doublearea", []
-(
-  const Eigen::MatrixXd& l,
-  Eigen::MatrixXd& dblA
-)
-{
-  return igl::doublearea(l,dblA);
-}, __doc_igl_doublearea,
-py::arg("l"), py::arg("dblA"));
-
-m.def("doublearea_quad", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXd& dblA
-)
-{
-  return igl::doublearea_quad(V,F,dblA);
-}, __doc_igl_doublearea_quad,
-py::arg("V"), py::arg("F"), py::arg("dblA"));

+ 0 - 28
python/py_igl/py_dqs.cpp

@@ -1,28 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("dqs", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXd& W,
-  const RotationList& vQ,
-  const std::vector<Eigen::MatrixXd> & vT,
-  Eigen::MatrixXd& U
-)
-{
-  std::vector<Eigen::Vector3d> vTv;
-  for (auto item : vT) {
-    assert_is_Vector3("item", item);
-    Eigen::Vector3d obj = Eigen::Vector3d(item);
-    vTv.push_back(obj);
-  }
-  return igl::dqs(V, W, vQ, vTv, U);
-}, __doc_igl_dqs,
-py::arg("V"), py::arg("W"), py::arg("vQ"), py::arg("vT"), py::arg("U"));
-

+ 0 - 18
python/py_igl/py_edge_lengths.cpp

@@ -1,18 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("edge_lengths", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXd& L
-)
-{
-  return igl::edge_lengths(V, F, L);
-}, __doc_igl_edge_lengths,
-py::arg("V"), py::arg("F"), py::arg("L"));
-

+ 0 - 20
python/py_igl/py_edge_topology.cpp

@@ -1,20 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("edge_topology", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXi& EV,
-  Eigen::MatrixXi& FE,
-  Eigen::MatrixXi& EF
-)
-{
-  return igl::edge_topology(V, F, EV, FE, EF);
-}, __doc_igl_edge_lengths,
-py::arg("V"), py::arg("F"), py::arg("EV"), py::arg("FE"), py::arg("EF"));
-

+ 0 - 29
python/py_igl/py_eigs.cpp

@@ -1,29 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-py::enum_<igl::EigsType>(m, "EigsType")
-    .value("EIGS_TYPE_SM", igl::EIGS_TYPE_SM)
-    .value("EIGS_TYPE_LM", igl::EIGS_TYPE_LM)
-    .value("NUM_EIGS_TYPES", igl::NUM_EIGS_TYPES)
-    .export_values();
-
-m.def("eigs", []
-(
-  const Eigen::SparseMatrix<double>& A,
-  const Eigen::SparseMatrix<double>& B,
-  const size_t k,
-  const igl::EigsType type,
-  Eigen::MatrixXd& sU,
-  Eigen::MatrixXd& sS
-)
-{
-  Eigen::VectorXd sSt;
-  bool ret = igl::eigs(A,B,k,type,sU,sSt);
-  sS = sSt;
-  return ret;
-}, __doc_igl_eigs,
-py::arg("A"), py::arg("B"), py::arg("k"), py::arg("type"), py::arg("sU"), py::arg("sS"));

+ 0 - 24
python/py_igl/py_exact_geodesic.cpp

@@ -1,24 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2018 Zhongshi Jiang <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("exact_geodesic", []
-(
-    const Eigen::MatrixXd &V,
-    const Eigen::MatrixXi &F,
-    const Eigen::MatrixXi &VS,
-    const Eigen::MatrixXi &FS,
-    const Eigen::MatrixXi &VT,
-    const Eigen::MatrixXi &FT,
-    Eigen::MatrixXd &D
-)
-{
-  return igl::exact_geodesic(V, F, VS,FS,VT,FT, D);
-}, __doc_igl_exact_geodesic,
-py::arg("V"), py::arg("F"), py::arg("VS"), py::arg("FS"), py::arg("VT"), py::arg("FT"), py::arg("D"));
-

+ 0 - 34
python/py_igl/py_find_cross_field_singularities.cpp

@@ -1,34 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("find_cross_field_singularities", []
-(
-  const Eigen::MatrixXd &V,
-  const Eigen::MatrixXi &F,
-  const Eigen::MatrixXi &Handle_MMatch,
-  Eigen::MatrixXi &isSingularity,
-  Eigen::MatrixXi &singularityIndex
-)
-{
-  return igl::find_cross_field_singularities(V,F,Handle_MMatch,isSingularity,singularityIndex);
-}, __doc_igl_find_cross_field_singularities,
-py::arg("V"), py::arg("F"), py::arg("Handle_MMatch"), py::arg("isSingularity"), py::arg("singularityIndex"));
-
-m.def("find_cross_field_singularities", []
-(
-  const Eigen::MatrixXd &V,
-  const Eigen::MatrixXi &F,
-  const Eigen::MatrixXd &PD1,
-  const Eigen::MatrixXd &PD2,
-  Eigen::MatrixXi &isSingularity,
-  Eigen::MatrixXi &singularityIndex,
-  bool isCombed
-)
-{
-  return igl::find_cross_field_singularities(V,F,PD1,PD2,isSingularity,singularityIndex,isCombed);
-}, __doc_igl_find_cross_field_singularities,
-py::arg("V"), py::arg("F"), py::arg("PD1"), py::arg("PD2"), py::arg("isSingularity"), py::arg("singularityIndex"),  py::arg("isCombed") = false);

+ 0 - 29
python/py_igl/py_fit_rotations.cpp

@@ -1,29 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("fit_rotations", []
-(
-  const Eigen::MatrixXd& S,
-  const bool single_precision,
-  Eigen::MatrixXd& R
-)
-{
-  return igl::fit_rotations(S, single_precision, R);
-}, __doc_igl_fit_rotations,
-py::arg("S"), py::arg("single_precision"), py::arg("R"));
-
-
-m.def("fit_rotations_planar", []
-(
-  const Eigen::MatrixXd& S,
-  Eigen::MatrixXd& R
-)
-{
-  return igl::fit_rotations_planar(S, R);
-}, __doc_igl_fit_rotations_planar,
-py::arg("S"), py::arg("R"));
-

+ 0 - 16
python/py_igl/py_floor.cpp

@@ -1,16 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("floor", []
-(
-  const Eigen::MatrixXd& X,
-  Eigen::MatrixXi& Y
-)
-{
-  return igl::floor(X,Y);
-}, __doc_igl_floor,
-py::arg("X"), py::arg("Y"));

+ 0 - 69
python/py_igl/py_forward_kinematics.cpp

@@ -1,69 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-//m.def("forward_kinematics", []
-//(
-//  const Eigen::MatrixXd& C,
-//  const Eigen::MatrixXi& BE,
-//  const Eigen::MatrixXi& P,
-//  std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> > & dQ,
-//  std::vector<Eigen::Vector3d> & dT,
-//  std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> > & vQ,
-//  std::vector<Eigen::Vector3d> & vT
-//)
-//{
-//  return igl::forward_kinematics(C, BE, P, dQ, dT, vQ, vT);
-//}, __doc_igl_forward_kinematics,
-//py::arg("C"), py::arg("BE"), py::arg("P"), py::arg("dQ"), py::arg("dT"), py::arg("vQ"), py::arg("vT"));
-
-m.def("forward_kinematics", []
-(
-  const Eigen::MatrixXd& C,
-  const Eigen::MatrixXi& BE,
-  const Eigen::MatrixXi& P,
-  const RotationList& dQ,
-  RotationList& vQ,
-  py::list vT
-)
-{
-  std::vector<Eigen::Vector3d> vTl;
-  igl::forward_kinematics(C, BE, P, dQ, vQ, vTl);
-  for (auto item : vTl) {
-    py::object obj = py::cast(Eigen::MatrixXd(item));
-    vT.append(obj);
-  }
-}, __doc_igl_forward_kinematics,
-py::arg("C"), py::arg("BE"), py::arg("P"), py::arg("dQ"), py::arg("vQ"), py::arg("vT"));
-
-//m.def("forward_kinematics", []
-//(
-//  const Eigen::MatrixXd& C,
-//  const Eigen::MatrixXi& BE,
-//  const Eigen::MatrixXi& P,
-//  std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> > & dQ,
-//  std::vector<Eigen::Vector3d> & dT,
-//  Eigen::MatrixXd& T
-//)
-//{
-//  return igl::forward_kinematics(C, BE, P, dQ, dT, T);
-//}, __doc_igl_forward_kinematics,
-//py::arg("C"), py::arg("BE"), py::arg("P"), py::arg("dQ"), py::arg("dT"), py::arg("T"));
-
-//m.def("forward_kinematics", []
-//(
-//  const Eigen::MatrixXd& C,
-//  const Eigen::MatrixXi& BE,
-//  const Eigen::MatrixXi& P,
-//  std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> > & dQ,
-//  Eigen::MatrixXd& T
-//)
-//{
-//  return igl::forward_kinematics(C, BE, P, dQ, T);
-//}, __doc_igl_forward_kinematics,
-//py::arg("C"), py::arg("BE"), py::arg("P"), py::arg("dQ"), py::arg("T"));
-

+ 0 - 17
python/py_igl/py_gaussian_curvature.cpp

@@ -1,17 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("gaussian_curvature", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXd& K
-)
-{
-  return igl::gaussian_curvature(V,F,K);
-}, __doc_igl_gaussian_curvature,
-py::arg("V"), py::arg("F"), py::arg("K"));

+ 0 - 13
python/py_igl/py_get_seconds.cpp

@@ -1,13 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("get_seconds", []
-()
-{
-  return igl::get_seconds();
-}, __doc_igl_get_seconds);
-

+ 0 - 17
python/py_igl/py_grad.cpp

@@ -1,17 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("grad", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::SparseMatrix<double>& G
-)
-{
-  return igl::grad(V,F,G);
-}, __doc_igl_grad,
-py::arg("V"), py::arg("F"), py::arg("G"));

+ 0 - 21
python/py_igl/py_harmonic.cpp

@@ -1,21 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("harmonic", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXi& b,
-  const Eigen::MatrixXd& bc,
-  const int k,
-  Eigen::MatrixXd& W
-)
-{
-  assert_is_VectorX("b",b);
-  return igl::harmonic(V,F,b,bc,k,W);
-}, __doc_igl_harmonic,
-py::arg("V"), py::arg("F"), py::arg("b"), py::arg("bc"), py::arg("k"), py::arg("W"));

+ 0 - 51
python/py_igl/py_hsv_to_rgb.cpp

@@ -1,51 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-// COMPLETE BINDINGS ========================
-
-
-m.def("hsv_to_rgb", []
-(
-  const Eigen::MatrixXd& H,
-  Eigen::MatrixXd& R
-)
-{
-  return igl::hsv_to_rgb(H, R);
-}, __doc_igl_hsv_to_rgb,
-py::arg("H"), py::arg("R"));
-
-
-
-
-
-// INCOMPLETE BINDINGS ========================
-
-
-//m.def("hsv_to_rgb", []
-//(
-//  T * hsv,
-//  T * rgb
-//)
-//{
-//  return igl::hsv_to_rgb(hsv, rgb);
-//}, __doc_igl_hsv_to_rgb,
-//py::arg("hsv"), py::arg("rgb"));
-
-//m.def("hsv_to_rgb", []
-//(
-//  T & h,
-//  T & s,
-//  T & v,
-//  T & r,
-//  T & g,
-//  T & b
-//)
-//{
-//  return igl::hsv_to_rgb(h, s, v, r, g, b);
-//}, __doc_igl_hsv_to_rgb,
-//py::arg("h"), py::arg("s"), py::arg("v"), py::arg("r"), py::arg("g"), py::arg("b"));
-

+ 0 - 41
python/py_igl/py_internal_angles.cpp

@@ -1,41 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("internal_angles", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXd& K
-)
-{
-  return igl::internal_angles(V, F, K);
-}, __doc_igl_internal_angles,
-py::arg("V"), py::arg("F"), py::arg("K"));
-
-m.def("internal_angles_using_squared_edge_lengths", []
-(
-  const Eigen::MatrixXd& L_sq,
-  Eigen::MatrixXd& K
-)
-{
-  return igl::internal_angles_using_squared_edge_lengths(L_sq, K);
-}, __doc_igl_internal_angles,
-py::arg("L_sq"), py::arg("K"));
-
-//m.def("internal_angles_using_edge_lengths", []
-//(
-//  const Eigen::MatrixXd& L,
-//  Eigen::MatrixXd& K
-//)
-//{
-//  return igl::internal_angles_using_edge_lengths(L, K);
-//}, __doc_igl_internal_angles,
-//py::arg("L"), py::arg("K"));
-
-

+ 0 - 16
python/py_igl/py_invert_diag.cpp

@@ -1,16 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("invert_diag", []
-(
-  const Eigen::SparseMatrix<double>& X,
-  Eigen::SparseMatrix<double>& Y
-)
-{
-  return igl::invert_diag(X,Y);
-}, __doc_igl_invert_diag,
-py::arg("X"), py::arg("Y"));

+ 0 - 19
python/py_igl/py_is_irregular_vertex.cpp

@@ -1,19 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("is_irregular_vertex", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F
-)
-{
-  return igl::is_irregular_vertex(V, F);
-}, __doc_igl_is_irregular_vertex,
-py::arg("V"), py::arg("F"));
-

+ 0 - 31
python/py_igl/py_jet.cpp

@@ -1,31 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("jet", []
-(
-  const Eigen::MatrixXd& Z,
-  const bool normalize,
-  Eigen::MatrixXd& C
-)
-{
-  assert_is_VectorX("Z",Z);
-  return igl::jet(Z,normalize,C);
-}, __doc_igl_jet,
-py::arg("Z"), py::arg("normalize"), py::arg("C"));
-
-m.def("jet", []
-(
-  const Eigen::MatrixXd& Z,
-  const double min_Z,
-  const double max_Z,
-  Eigen::MatrixXd& C
-)
-{
-  assert_is_VectorX("Z",Z);
-  return igl::jet(Z,min_Z,max_Z,C);
-}, __doc_igl_jet,
-py::arg("Z"), py::arg("min_Z"), py::arg("max_Z"), py::arg("C"));

+ 0 - 74
python/py_igl/py_lbs_matrix.cpp

@@ -1,74 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-// COMPLETE BINDINGS ========================
-
-
-m.def("lbs_matrix", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXd& W,
-  Eigen::MatrixXd& M
-)
-{
-  return igl::lbs_matrix(V, W, M);
-}, __doc_igl_lbs_matrix,
-py::arg("V"), py::arg("W"), py::arg("M"));
-
-m.def("lbs_matrix_column", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXd& W,
-  Eigen::MatrixXd& M
-)
-{
-  return igl::lbs_matrix_column(V, W, M);
-}, __doc_igl_lbs_matrix_column,
-py::arg("V"), py::arg("W"), py::arg("M"));
-
-m.def("lbs_matrix_column", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXd& W,
-  const Eigen::MatrixXi& WI,
-  Eigen::MatrixXd& M
-)
-{
-  return igl::lbs_matrix_column(V, W, WI, M);
-}, __doc_igl_lbs_matrix_column,
-py::arg("V"), py::arg("W"), py::arg("WI"), py::arg("M"));
-
-
-
-
-
-// INCOMPLETE BINDINGS ========================
-
-
-m.def("lbs_matrix_column", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXd& W,
-  Eigen::SparseMatrix<double>& M
-)
-{
-  return igl::lbs_matrix_column(V, W, M);
-}, __doc_igl_lbs_matrix_column,
-py::arg("V"), py::arg("W"), py::arg("M"));
-
-m.def("lbs_matrix_column", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXd& W,
-  const Eigen::MatrixXi& WI,
-  Eigen::SparseMatrix<double>& M
-)
-{
-  return igl::lbs_matrix_column(V, W, WI, M);
-}, __doc_igl_lbs_matrix_column,
-py::arg("V"), py::arg("W"), py::arg("WI"), py::arg("M"));
-

+ 0 - 19
python/py_igl/py_local_basis.cpp

@@ -1,19 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("local_basis", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXd& B1,
-  Eigen::MatrixXd& B2,
-  Eigen::MatrixXd& B3
-)
-{
-  return igl::local_basis(V,F,B1,B2,B3);
-}, __doc_igl_local_basis,
-py::arg("V"), py::arg("F"), py::arg("B1"), py::arg("B2"), py::arg("B3"));

+ 0 - 20
python/py_igl/py_lscm.cpp

@@ -1,20 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("lscm", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXi& b,
-  const Eigen::MatrixXd& bc,
-  Eigen::MatrixXd& V_uv
-)
-{
-  assert_is_VectorX("b",b);
-  return igl::lscm(V,F,b,bc,V_uv);
-}, __doc_igl_lscm,
-py::arg("V"), py::arg("F"), py::arg("b"), py::arg("bc"), py::arg("V_uv"));

+ 0 - 18
python/py_igl/py_map_vertices_to_circle.cpp

@@ -1,18 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("map_vertices_to_circle", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& bnd,
-  Eigen::MatrixXd& UV
-)
-{
-  assert_is_VectorX("bnd",bnd);
-  return igl::map_vertices_to_circle(V,bnd,UV);
-}, __doc_igl_map_vertices_to_circle,
-py::arg("V"), py::arg("bnd"), py::arg("UV"));

+ 0 - 28
python/py_igl/py_marching_tets.cpp

@@ -1,28 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("marching_tets", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& T,
-  const Eigen::MatrixXd& plane,
-  Eigen::MatrixXd& U,
-  Eigen::MatrixXi& G,
-  Eigen::MatrixXi& J,
-  Eigen::SparseMatrix<double>& BC
-)
-{
-  assert_is_VectorX("plane", plane);
-  Eigen::VectorXd planev;
-  if (plane.size() != 0)
-    planev = plane;
-  Eigen::VectorXi Jv;
-  igl::marching_tets(V, T, planev, U, G, Jv, BC);
-  J = Jv;
-}, __doc_igl_marching_tets,
-py::arg("V"), py::arg("T"), py::arg("plane"), py::arg("U"), py::arg("G"), py::arg("J"), py::arg("BC"));
-

+ 0 - 26
python/py_igl/py_massmatrix.cpp

@@ -1,26 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-py::enum_<igl::MassMatrixType>(m, "MassMatrixType")
-    .value("MASSMATRIX_TYPE_BARYCENTRIC", igl::MASSMATRIX_TYPE_BARYCENTRIC)
-    .value("MASSMATRIX_TYPE_VORONOI", igl::MASSMATRIX_TYPE_VORONOI)
-    .value("MASSMATRIX_TYPE_FULL", igl::MASSMATRIX_TYPE_FULL)
-    .value("MASSMATRIX_TYPE_DEFAULT", igl::MASSMATRIX_TYPE_DEFAULT)
-    .value("NUM_MASSMATRIX_TYPE", igl::NUM_MASSMATRIX_TYPE)
-    .export_values();
-
-m.def("massmatrix", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const igl::MassMatrixType type,
-  Eigen::SparseMatrix<double>& M
-)
-{
-  return igl::massmatrix(V,F,type,M);
-}, __doc_igl_massmatrix,
-py::arg("V"), py::arg("F"), py::arg("type"), py::arg("M"));

+ 0 - 80
python/py_igl/py_min_quad_with_fixed.cpp

@@ -1,80 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-// Wrap the data class, no properties are exposed since it is not necessary
-py::class_<igl::min_quad_with_fixed_data<double> > min_quad_with_fixed_data(m, "min_quad_with_fixed_data");
-
-min_quad_with_fixed_data
-.def(py::init<>());
-
-m.def("min_quad_with_fixed_precompute", []
-(
-  const Eigen::SparseMatrix<double>& A,
-  const Eigen::MatrixXi& known,
-  const Eigen::SparseMatrix<double>& Aeq,
-  const bool pd,
-  igl::min_quad_with_fixed_data<double> & data
-)
-{
-  assert_is_VectorX("known",known);
-  return igl::min_quad_with_fixed_precompute(A,known,Aeq,pd,data);
-}, __doc_igl_min_quad_with_fixed,
-py::arg("A"), py::arg("known"), py::arg("Aeq"), py::arg("pd"), py::arg("data"));
-
-m.def("min_quad_with_fixed_solve", []
-(
-  const igl::min_quad_with_fixed_data<double> & data,
-  const Eigen::MatrixXd& B,
-  const Eigen::MatrixXd& Y,
-  const Eigen::MatrixXd & Beq,
-  Eigen::MatrixXd& Z,
-  Eigen::MatrixXd& sol
-)
-{
-  assert_is_VectorX("B",B);
-  assert_is_VectorX("Y",Y);
-  assert_is_VectorX("Beq",Beq);
-  return igl::min_quad_with_fixed_solve(data,B,Y,Beq,Z,sol);
-}, __doc_igl_min_quad_with_fixed,
-py::arg("data"), py::arg("B"), py::arg("Y"), py::arg("Beq"), py::arg("Z"), py::arg("sol"));
-
-m.def("min_quad_with_fixed_solve", []
-(
-  const igl::min_quad_with_fixed_data<double> & data,
-  const Eigen::MatrixXd& B,
-  const Eigen::MatrixXd& Y,
-  const Eigen::MatrixXd & Beq,
-  Eigen::MatrixXd& Z
-)
-{
-  assert_is_VectorX("B",B);
-  assert_is_VectorX("Y",Y);
-  assert_is_VectorX("Beq",Beq);
-  return igl::min_quad_with_fixed_solve(data,B,Y,Beq,Z);
-}, __doc_igl_min_quad_with_fixed,
-py::arg("data"), py::arg("B"), py::arg("Y"), py::arg("Beq"), py::arg("Z"));
-
-m.def("min_quad_with_fixed", []
-(
-  const Eigen::SparseMatrix<double>& A,
-  const Eigen::MatrixXd& B,
-  const Eigen::MatrixXi& known,
-  const Eigen::MatrixXd& Y,
-  const Eigen::SparseMatrix<double>& Aeq,
-  const Eigen::MatrixXd& Beq,
-  const bool pd,
-  Eigen::MatrixXd& Z
-)
-{
-  assert_is_VectorX("B",B);
-  assert_is_VectorX("known",known);
-  assert_is_VectorX("Y",Y);
-  assert_is_VectorX("Beq",Beq);
-  return igl::min_quad_with_fixed(A,B,known,Y,Aeq,Beq,pd,Z);
-}, __doc_igl_min_quad_with_fixed,
-py::arg("A"), py::arg("B"), py::arg("known"), py::arg("Y"), py::arg("Aeq"), py::arg("Beq"), py::arg("pd"), py::arg("Z"));

+ 0 - 19
python/py_igl/py_normalize_row_lengths.cpp

@@ -1,19 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("normalize_row_lengths", []
-(
-  const Eigen::MatrixXd& A,
-  Eigen::MatrixXd& B
-)
-{
-  return igl::normalize_row_lengths(A, B);
-}, __doc_igl_normalize_row_lengths,
-py::arg("A"), py::arg("B"));
-

+ 0 - 19
python/py_igl/py_normalize_row_sums.cpp

@@ -1,19 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-
-
-m.def("normalize_row_sums", []
-(
-  const Eigen::MatrixXd& A,
-  Eigen::MatrixXd& B
-)
-{
-  return igl::normalize_row_sums(A, B);
-}, __doc_igl_normalize_row_sums,
-py::arg("A"), py::arg("B"));
-

+ 0 - 65
python/py_igl/py_parula.cpp

@@ -1,65 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-//m.def("parula", []
-//(
-//  const double f,
-//  T * rgb
-//)
-//{
-//  return igl::parula(f, rgb);
-//}, __doc_igl_parula,
-//py::arg("f"), py::arg("rgb"));
-
-m.def("parula", []
-(
-const double f
-)
-{
-  double r, g, b;
-  igl::parula(f, r, g, b);
-  return std::make_tuple(r,g,b);
-}, __doc_igl_parula,
-py::arg("f"));
-
-m.def("parula", []
-(
-  const double f,
-  double & r,
-  double & g,
-  double & b
-)
-{
-  return igl::parula(f, r, g, b);
-}, __doc_igl_parula,
-py::arg("f"), py::arg("r"), py::arg("g"), py::arg("b"));
-
-m.def("parula", []
-(
-  const Eigen::MatrixXd& Z,
-  const bool normalize,
-  Eigen::MatrixXd& C
-)
-{
-  assert_is_VectorX("Z",Z);
-  return igl::parula(Z, normalize, C);
-}, __doc_igl_parula,
-py::arg("Z"), py::arg("normalize"), py::arg("C"));
-
-m.def("parula", []
-(
-  const Eigen::MatrixXd& Z,
-  const double min_Z,
-  const double max_Z,
-  Eigen::MatrixXd& C
-)
-{
-  assert_is_VectorX("Z",Z);
-  return igl::parula(Z, min_Z, max_Z, C);
-}, __doc_igl_parula,
-py::arg("Z"), py::arg("min_Z"), py::arg("max_Z"), py::arg("C"));
-

+ 0 - 45
python/py_igl/py_per_corner_normals.cpp

@@ -1,45 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("per_corner_normals", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const double corner_threshold,
-  Eigen::MatrixXd& CN
-)
-{
-  return igl::per_corner_normals(V,F,corner_threshold,CN);
-}, __doc_igl_per_corner_normals,
-py::arg("V"), py::arg("F"), py::arg("corner_threshold"), py::arg("CN"));
-
-m.def("per_corner_normals", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXd& FN,
-  const double corner_threshold,
-  Eigen::MatrixXd& CN
-)
-{
-  return igl::per_corner_normals(V,F,FN,corner_threshold,CN);
-}, __doc_igl_per_corner_normals,
-py::arg("V"), py::arg("F"), py::arg("FN"), py::arg("corner_threshold"), py::arg("CN"));
-
-m.def("per_corner_normals", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXd& FN,
-  const double corner_threshold,
-  const std::vector<std::vector<int> >& VF,
-  Eigen::MatrixXd& CN
-)
-{
-  return igl::per_corner_normals(V,F,FN,VF,corner_threshold,CN);
-}, __doc_igl_per_corner_normals,
-py::arg("V"), py::arg("F"), py::arg("FN"), py::arg("corner_threshold"), py::arg("VF"), py::arg("CN"));

+ 0 - 57
python/py_igl/py_per_edge_normals.cpp

@@ -1,57 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-py::enum_<igl::PerEdgeNormalsWeightingType>(m, "PerEdgeNormalsWeightingType")
-    .value("PER_EDGE_NORMALS_WEIGHTING_TYPE_UNIFORM", igl::PER_EDGE_NORMALS_WEIGHTING_TYPE_UNIFORM)
-    .value("PER_EDGE_NORMALS_WEIGHTING_TYPE_AREA", igl::PER_EDGE_NORMALS_WEIGHTING_TYPE_AREA)
-    .value("PER_EDGE_NORMALS_WEIGHTING_TYPE_DEFAULT", igl::PER_EDGE_NORMALS_WEIGHTING_TYPE_DEFAULT)
-    .value("NUM_PER_EDGE_NORMALS_WEIGHTING_TYPE", igl::NUM_PER_EDGE_NORMALS_WEIGHTING_TYPE)
-    .export_values();
-
-
-m.def("per_edge_normals", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const igl::PerEdgeNormalsWeightingType weight,
-  const Eigen::MatrixXd& FN,
-  Eigen::MatrixXd& N,
-  Eigen::MatrixXi& E,
-  Eigen::MatrixXi& EMAP
-)
-{
-  return igl::per_edge_normals(V, F, weight, FN, N, E, EMAP);
-}, __doc_igl_per_edge_normals,
-py::arg("V"), py::arg("F"), py::arg("weight"), py::arg("FN"), py::arg("N"), py::arg("E"), py::arg("EMAP"));
-
-m.def("per_edge_normals", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const igl::PerEdgeNormalsWeightingType weight,
-  Eigen::MatrixXd& N,
-  Eigen::MatrixXi& E,
-  Eigen::MatrixXi& EMAP
-)
-{
-  return igl::per_edge_normals(V, F, weight, N, E, EMAP);
-}, __doc_igl_per_edge_normals,
-py::arg("V"), py::arg("F"), py::arg("weight"), py::arg("N"), py::arg("E"), py::arg("EMAP"));
-
-m.def("per_edge_normals", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXd& N,
-  Eigen::MatrixXi& E,
-  Eigen::MatrixXi& EMAP
-)
-{
-  return igl::per_edge_normals(V, F, N, E, EMAP);
-}, __doc_igl_per_edge_normals,
-py::arg("V"), py::arg("F"), py::arg("N"), py::arg("E"), py::arg("EMAP"));
-

+ 0 - 41
python/py_igl/py_per_face_normals.cpp

@@ -1,41 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-m.def("per_face_normals", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXd& Z,
-  Eigen::MatrixXd& N
-)
-{
-  assert_is_VectorX("Z",Z);
-  return igl::per_face_normals(V,F,Z,N);
-}, __doc_igl_per_face_normals,
-py::arg("V"), py::arg("F"), py::arg("Z"), py::arg("N"));
-
-m.def("per_face_normals", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXd& N
-)
-{
-  return igl::per_face_normals(V,F,N);
-}, __doc_igl_per_face_normals,
-py::arg("V"), py::arg("F"), py::arg("N"));
-
-m.def("per_face_normals_stable", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXd& N
-)
-{
-  return igl::per_face_normals_stable(V,F,N);
-}, __doc_igl_per_face_normals,
-py::arg("V"), py::arg("F"), py::arg("N"));

+ 0 - 62
python/py_igl/py_per_vertex_normals.cpp

@@ -1,62 +0,0 @@
-// This file is part of libigl, a simple c++ geometry processing library.
-//
-// Copyright (C) 2017 Sebastian Koch <[email protected]> and Daniele Panozzo <[email protected]>
-//
-// This Source Code Form is subject to the terms of the Mozilla Public License
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
-// obtain one at http://mozilla.org/MPL/2.0/.
-py::enum_<igl::PerVertexNormalsWeightingType>(m, "PerVertexNormalsWeightingType")
-    .value("PER_VERTEX_NORMALS_WEIGHTING_TYPE_UNIFORM", igl::PER_VERTEX_NORMALS_WEIGHTING_TYPE_UNIFORM)
-    .value("PER_VERTEX_NORMALS_WEIGHTING_TYPE_AREA", igl::PER_VERTEX_NORMALS_WEIGHTING_TYPE_AREA)
-    .value("PER_VERTEX_NORMALS_WEIGHTING_TYPE_ANGLE", igl::PER_VERTEX_NORMALS_WEIGHTING_TYPE_ANGLE)
-    .value("PER_VERTEX_NORMALS_WEIGHTING_TYPE_DEFAULT", igl::PER_VERTEX_NORMALS_WEIGHTING_TYPE_DEFAULT)
-    .value("NUM_PER_VERTEX_NORMALS_WEIGHTING_TYPE", igl::NUM_PER_VERTEX_NORMALS_WEIGHTING_TYPE)
-    .export_values();
-
-m.def("per_vertex_normals", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const igl::PerVertexNormalsWeightingType weighting,
-  Eigen::MatrixXd& N
-)
-{
-  return igl::per_vertex_normals(V,F,weighting,N);
-}, __doc_igl_per_vertex_normals,
-py::arg("V"), py::arg("F"), py::arg("weighting"), py::arg("N"));
-
-m.def("per_vertex_normals", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  Eigen::MatrixXd& N
-)
-{
-  return igl::per_vertex_normals(V,F,N);
-}, __doc_igl_per_vertex_normals,
-py::arg("V"), py::arg("F"), py::arg("N"));
-
-m.def("per_vertex_normals", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const igl::PerVertexNormalsWeightingType weighting,
-  const Eigen::MatrixXd& FN,
-  Eigen::MatrixXd& N
-)
-{
-  return igl::per_vertex_normals(V,F,weighting,FN,N);
-}, __doc_igl_per_vertex_normals,
-py::arg("V"), py::arg("F"), py::arg("weighting"), py::arg("FN"), py::arg("N"));
-
-m.def("per_vertex_normals", []
-(
-  const Eigen::MatrixXd& V,
-  const Eigen::MatrixXi& F,
-  const Eigen::MatrixXd& FN,
-  Eigen::MatrixXd& N
-)
-{
-  return igl::per_vertex_normals(V,F,FN,N);
-}, __doc_igl_per_vertex_normals,
-py::arg("V"), py::arg("F"), py::arg("FN"), py::arg("N"));

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно