#include #include #include #include #include #include #include #include #include #include #include #include #include #include // Input mesh Eigen::MatrixXd V; Eigen::MatrixXi F; // Per face bases Eigen::MatrixXd B1,B2,B3; // Face barycenters Eigen::MatrixXd B; // Scale for visualizing the fields double global_scale; // Random length factor double rand_factor = 5; Eigen::VectorXi samples; void readSamples(const std::string &fname, Eigen::VectorXi &samples) { int numSamples; FILE *fp = fopen(fname.c_str(),"r"); if (fscanf(fp, "%d", &numSamples)!=1) { fclose(fp); return; } samples.resize(numSamples,1); int vali; for (int i =0; i'9') return false; viewer.data().lines.resize(0,9); int num = key - '0'; // Interpolate std::cerr << "Interpolating " << num << "-PolyVector field" << std::endl; VectorXi b(3); b << 1511, 603, 506; int numConstraintsToGenerate; // if it's not a 2-PV or a 1-PV, include a line direction (2 opposite vectors) // in the field if (num>=5) numConstraintsToGenerate = num-2; else if (num>=3) numConstraintsToGenerate = num-1; else numConstraintsToGenerate = num; MatrixXd bc(b.size(),numConstraintsToGenerate*3); for (unsigned i=0; i=5) rootsIndex[num-2] = -2; if (num>=3) rootsIndex[num-1] = -1; // Interpolated PolyVector field Eigen::MatrixXd pvf; igl::n_polyvector_general(V, F, b, bc, rootsIndex, pvf); ofstream ofs; ofs.open("pvf.txt", ofstream::out); ofs<