#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "tutorial_shared_path.h" typedef std::vector > RotationList; const Eigen::RowVector3d sea_green(70./255.,252./255.,167./255.); Eigen::MatrixXd V,U,M; Eigen::MatrixXi F; Eigen::VectorXi S,b; Eigen::MatrixXd L; Eigen::RowVector3d mid; double anim_t = 0.0; double anim_t_dir = 0.03; double bbd = 1.0; bool resolve = true; igl::ARAPData arap_data,arap_grouped_data; igl::ArapDOFData arap_dof_data; Eigen::SparseMatrix Aeq; enum ModeType { MODE_TYPE_ARAP = 0, MODE_TYPE_ARAP_GROUPED = 1, MODE_TYPE_ARAP_DOF = 2, NUM_MODE_TYPES = 4 } mode = MODE_TYPE_ARAP; bool pre_draw(igl::viewer::Viewer & viewer) { using namespace Eigen; using namespace std; if(resolve) { MatrixXd bc(b.size(),V.cols()); VectorXd Beq(3*b.size()); for(int i = 0;i > ijv; for(int i = 0;i(3*i + d,i + c*m*3 + d*m, homo(c))); } } } Aeq.setFromTriplets(ijv.begin(),ijv.end()); igl::arap_dof_precomputation(V,F,M,G,arap_dof_data); igl::arap_dof_recomputation(VectorXi(),Aeq,arap_dof_data); // Initialize MatrixXd Istack = MatrixXd::Identity(3,3+1).replicate(1,m); igl::columnize(Istack,m,2,L); // Precomputation for ARAP cout<<"Initializing ARAP..."<