max_faces_stopping_condition.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "max_faces_stopping_condition.h"
  2. IGL_INLINE void igl::max_faces_stopping_condition(
  3. int & m,
  4. const int orig_m,
  5. const int max_m,
  6. std::function<bool(
  7. const Eigen::MatrixXd &,
  8. const Eigen::MatrixXi &,
  9. const Eigen::MatrixXi &,
  10. const Eigen::VectorXi &,
  11. const Eigen::MatrixXi &,
  12. const Eigen::MatrixXi &,
  13. const std::set<std::pair<double,int> > &,
  14. const std::vector<std::set<std::pair<double,int> >::iterator > &,
  15. const Eigen::MatrixXd &,
  16. const int,
  17. const int,
  18. const int,
  19. const int,
  20. const int)> & stopping_condition)
  21. {
  22. stopping_condition =
  23. [orig_m,max_m,&m](
  24. const Eigen::MatrixXd &,
  25. const Eigen::MatrixXi &,
  26. const Eigen::MatrixXi &,
  27. const Eigen::VectorXi &,
  28. const Eigen::MatrixXi &,
  29. const Eigen::MatrixXi &,
  30. const std::set<std::pair<double,int> > &,
  31. const std::vector<std::set<std::pair<double,int> >::iterator > &,
  32. const Eigen::MatrixXd &,
  33. const int,
  34. const int,
  35. const int,
  36. const int f1,
  37. const int f2)->bool
  38. {
  39. // Only subtract if we're collapsing a real face
  40. if(f1 < orig_m) m-=1;
  41. if(f2 < orig_m) m-=1;
  42. return m<=(int)max_m;
  43. };
  44. }
  45. IGL_INLINE
  46. std::function<bool(
  47. const Eigen::MatrixXd &,
  48. const Eigen::MatrixXi &,
  49. const Eigen::MatrixXi &,
  50. const Eigen::VectorXi &,
  51. const Eigen::MatrixXi &,
  52. const Eigen::MatrixXi &,
  53. const std::set<std::pair<double,int> > &,
  54. const std::vector<std::set<std::pair<double,int> >::iterator > &,
  55. const Eigen::MatrixXd &,
  56. const int,
  57. const int,
  58. const int,
  59. const int,
  60. const int)>
  61. igl::max_faces_stopping_condition(
  62. int & m,
  63. const int orig_m,
  64. const int max_m)
  65. {
  66. std::function<bool(
  67. const Eigen::MatrixXd &,
  68. const Eigen::MatrixXi &,
  69. const Eigen::MatrixXi &,
  70. const Eigen::VectorXi &,
  71. const Eigen::MatrixXi &,
  72. const Eigen::MatrixXi &,
  73. const std::set<std::pair<double,int> > &,
  74. const std::vector<std::set<std::pair<double,int> >::iterator > &,
  75. const Eigen::MatrixXd &,
  76. const int,
  77. const int,
  78. const int,
  79. const int,
  80. const int)> stopping_condition;
  81. max_faces_stopping_condition(
  82. m,orig_m,max_m,stopping_condition);
  83. return stopping_condition;
  84. }