@@ -12,7 +12,7 @@ namespace py = pybind11;
1212PYBIND11_MODULE (pyigl_classes, m)
1313{
1414 py::class_<igl::ARAPData>(m, " ARAP" )
15- .def (py::init ([](Eigen::MatrixXd &v, Eigen::MatrixXi &f, int dim, Eigen::MatrixXi &b) {
15+ .def (py::init ([](Eigen::MatrixXd &v, Eigen::MatrixXi &f, int dim, Eigen::MatrixXi &b, const int energy_type ) {
1616 if (dim == 3 )
1717 {
1818 assert_valid_tet_or_tri_mesh (v, f);
@@ -25,8 +25,14 @@ PYBIND11_MODULE(pyigl_classes, m)
2525 {
2626 throw pybind11::value_error (" Invalid dimension must be 2 or 3 but got " + std::to_string (dim));
2727 }
28+ if (energy_type >= igl::NUM_ARAP_ENERGY_TYPES)
29+ {
30+ throw pybind11::value_error (" Invalid Energy Type. Must be one of igl.ARAP_ENERGY_TYPE_*" );
31+ }
2832
2933 std::unique_ptr<igl::ARAPData> adata = std::make_unique<igl::ARAPData>();
34+ adata->energy = static_cast <igl::ARAPEnergyType>(energy_type);
35+
3036 if (b.cols () == 1 )
3137 igl::arap_precomputation (v, f, dim, b, *adata);
3238 else if (b.rows () == 1 )
@@ -35,7 +41,7 @@ PYBIND11_MODULE(pyigl_classes, m)
3541 throw pybind11::value_error (" Invalid dimension for b, must be a vector, got " + std::to_string (b.rows ()) + " x" + std::to_string (b.cols ()));
3642 return adata;
3743 }),
38- py::arg (" v" ), py::arg (" f" ), py::arg (" dim" ), py::arg (" b" ))
44+ py::arg (" v" ), py::arg (" f" ), py::arg (" dim" ), py::arg (" b" ), py::arg ( " energy_type " ) = 3 )
3945 .def (
4046 " solve" , [](igl::ARAPData &self, Eigen::MatrixXd &bc, Eigen::MatrixXd &initial_guess) {
4147 if (bc.size () > 0 )
0 commit comments