mesh_to_tetgenio.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "mesh_to_tetgenio.h"
  2. // IGL includes
  3. #include <igl/matrix_to_list.h>
  4. // STL includes
  5. #include <cassert>
  6. IGL_INLINE bool igl::mesh_to_tetgenio(
  7. const std::vector<std::vector<REAL > > & V,
  8. const std::vector<std::vector<int> > & F,
  9. tetgenio & in)
  10. {
  11. using namespace std;
  12. // all indices start from 0
  13. in.firstnumber = 0;
  14. in.numberofpoints = V.size();
  15. in.pointlist = new REAL[in.numberofpoints * 3];
  16. // loop over points
  17. for(int i = 0; i < (int)V.size(); i++)
  18. {
  19. assert(V[i].size() == 3);
  20. in.pointlist[i*3+0] = V[i][0];
  21. in.pointlist[i*3+1] = V[i][1];
  22. in.pointlist[i*3+2] = V[i][2];
  23. }
  24. in.numberoffacets = F.size();
  25. in.facetlist = new tetgenio::facet[in.numberoffacets];
  26. in.facetmarkerlist = NULL;
  27. // loop over face
  28. for(int i = 0;i < (int)F.size(); i++)
  29. {
  30. tetgenio::facet * f = &in.facetlist[i];
  31. f->numberofpolygons = 1;
  32. f->polygonlist = new tetgenio::polygon[f->numberofpolygons];
  33. f->numberofholes = 0;
  34. f->holelist = NULL;
  35. tetgenio::polygon * p = &f->polygonlist[0];
  36. p->numberofvertices = F[i].size();
  37. p->vertexlist = new int[p->numberofvertices];
  38. // loop around face
  39. for(int j = 0;j < (int)F[i].size(); j++)
  40. {
  41. p->vertexlist[j] = F[i][j];
  42. }
  43. }
  44. return true;
  45. }
  46. template <typename DerivedV, typename DerivedF>
  47. IGL_INLINE bool igl::mesh_to_tetgenio(
  48. const Eigen::PlainObjectBase<DerivedV>& V,
  49. const Eigen::PlainObjectBase<DerivedF>& F,
  50. tetgenio & in)
  51. {
  52. using namespace igl;
  53. using namespace std;
  54. vector<vector<REAL> > vV;
  55. vector<vector<int> > vF;
  56. matrix_to_list(V,vV);
  57. matrix_to_list(F,vF);
  58. return mesh_to_tetgenio(vV,vF,in);
  59. }
  60. #ifndef IGL_HEADER_ONLY
  61. // Explicit template specialization
  62. template bool igl::mesh_to_tetgenio<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, tetgenio&);
  63. #endif