writeMSH.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #include <test_common.h>
  2. #include <catch2/catch.hpp>
  3. #include <igl/readMSH.h>
  4. #include <igl/writeMSH.h>
  5. #include <set>
  6. TEST_CASE("writeMSH","[igl]")
  7. {
  8. Eigen::MatrixXd X;
  9. Eigen::MatrixXi Tri;
  10. Eigen::MatrixXi Tet;
  11. Eigen::VectorXi TriTag;
  12. Eigen::VectorXi TetTag;
  13. std::vector<std::string> XFields;
  14. std::vector<std::string> EFields;
  15. std::vector<Eigen::MatrixXd> XF;
  16. std::vector<Eigen::MatrixXd> TriF;
  17. std::vector<Eigen::MatrixXd> TetF;
  18. // load source data
  19. REQUIRE(igl::readMSH(test_common::data_path("sphere_lowres_TMS_1-0001_Magstim_70mm_Fig8_nii_scalar.msh"),
  20. X, Tri, Tet, TriTag, TetTag, XFields, XF, EFields, TriF, TetF));
  21. // save check data
  22. REQUIRE(igl::writeMSH("test_binary_sphere_2.msh",
  23. X, Tri, Tet, TriTag, TetTag, XFields, XF, EFields, TriF, TetF));
  24. // load again
  25. Eigen::MatrixXd _X;
  26. Eigen::MatrixXi _Tri;
  27. Eigen::MatrixXi _Tet;
  28. Eigen::VectorXi _TriTag;
  29. Eigen::VectorXi _TetTag;
  30. std::vector<std::string> _XFields;
  31. std::vector<std::string> _EFields;
  32. std::vector<Eigen::MatrixXd> _XF;
  33. std::vector<Eigen::MatrixXd> _TriF;
  34. std::vector<Eigen::MatrixXd> _TetF;
  35. REQUIRE(igl::readMSH("test_binary_sphere_2.msh",
  36. _X, _Tri, _Tet, _TriTag, _TetTag, _XFields, _XF, _EFields, _TriF, _TetF));
  37. REQUIRE(_X.size() == X.size());
  38. REQUIRE(_Tri.size() == Tri.size());
  39. REQUIRE(_Tet.size() == Tet.size());
  40. REQUIRE(_TriTag.size() == TriTag.size());
  41. REQUIRE(_TetTag.size() == TetTag.size());
  42. REQUIRE(_XFields.size() == XFields.size());
  43. REQUIRE(_XF.size() == XF.size());
  44. REQUIRE(_EFields.size() == EFields.size());
  45. REQUIRE(_TriF.size() == TriF.size());
  46. REQUIRE(_TetF.size() == TetF.size());
  47. REQUIRE(_X.cols() == 3);
  48. REQUIRE(_X.rows() == (398+4506));
  49. REQUIRE(_Tri.cols() == 3);
  50. REQUIRE(_Tri.rows() == 8988);
  51. REQUIRE(_TriTag.rows() == 8988);
  52. REQUIRE(_Tet.cols() == 4);
  53. REQUIRE(_Tet.rows() == 25937);
  54. REQUIRE(_TetTag.rows() == 25937);
  55. //make sure field sizes are correct
  56. REQUIRE(_XF.size()==0);
  57. REQUIRE(_TriF.size()==1);
  58. REQUIRE(_TetF.size()==1);
  59. // normE , scalar field
  60. REQUIRE(_TriF[0].cols()==1);
  61. REQUIRE(_TriF[0].rows()==8988);
  62. REQUIRE(_TetF[0].cols()==1);
  63. REQUIRE(_TetF[0].rows()==25937);
  64. // check the contents too
  65. for(size_t i=0;i<X.rows();++i)
  66. for(size_t j=0;j<X.cols();++j)
  67. REQUIRE(_X(i,j) == X(i,j));
  68. for(size_t i=0;i<Tri.rows();++i)
  69. for(size_t j=0;j<Tri.cols();++j)
  70. REQUIRE(_Tri(i,j) == Tri(i,j));
  71. for(size_t i=0;i<Tet.rows();++i)
  72. for(size_t j=0;j<Tet.cols();++j)
  73. REQUIRE(_Tet(i,j) == Tet(i,j));
  74. for(size_t i=0;i<XFields.size();++i)
  75. {
  76. REQUIRE(XFields[i]==_XFields[i]);
  77. REQUIRE(XF[i].rows()==_XF[i].rows());
  78. REQUIRE(XF[i].cols()==_XF[i].cols());
  79. for(size_t j=0;j<XF[i].rows();++j)
  80. for(size_t k=0;k<XF[i].cols();++k)
  81. REQUIRE(XF[i](j,k)==_XF[i](j,k));
  82. }
  83. for(size_t i=0;i<EFields.size();++i)
  84. {
  85. REQUIRE(EFields[i]==_EFields[i]);
  86. REQUIRE(TriF[i].rows()==_TriF[i].rows());
  87. REQUIRE(TriF[i].cols()==_TriF[i].cols());
  88. for(size_t j=0;j<TriF[i].rows();++j)
  89. for(size_t k=0;k<TriF[i].cols();++k)
  90. REQUIRE(TriF[i](j,k)==_TriF[i](j,k));
  91. REQUIRE(TetF[i].rows()==_TetF[i].rows());
  92. REQUIRE(TetF[i].cols()==_TetF[i].cols());
  93. for(size_t j=0;j<TetF[i].rows();++j)
  94. for(size_t k=0;k<TetF[i].cols();++k)
  95. REQUIRE(TetF[i](j,k)==_TetF[i](j,k));
  96. }
  97. }