max_faces_stopping_condition.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // This file is part of libigl, a simple c++ geometry processing library.
  2. //
  3. // Copyright (C) 2016 Alec Jacobson <alecjacobson@gmail.com>
  4. //
  5. // This Source Code Form is subject to the terms of the Mozilla Public License
  6. // v. 2.0. If a copy of the MPL was not distributed with this file, You can
  7. // obtain one at http://mozilla.org/MPL/2.0/.
  8. #include "max_faces_stopping_condition.h"
  9. IGL_INLINE void igl::max_faces_stopping_condition(
  10. int & m,
  11. const int orig_m,
  12. const int max_m,
  13. std::function<bool(
  14. const Eigen::MatrixXd &,
  15. const Eigen::MatrixXi &,
  16. const Eigen::MatrixXi &,
  17. const Eigen::VectorXi &,
  18. const Eigen::MatrixXi &,
  19. const Eigen::MatrixXi &,
  20. const std::set<std::pair<double,int> > &,
  21. const std::vector<std::set<std::pair<double,int> >::iterator > &,
  22. const Eigen::MatrixXd &,
  23. const int,
  24. const int,
  25. const int,
  26. const int,
  27. const int)> & stopping_condition)
  28. {
  29. stopping_condition =
  30. [orig_m,max_m,&m](
  31. const Eigen::MatrixXd &,
  32. const Eigen::MatrixXi &,
  33. const Eigen::MatrixXi &,
  34. const Eigen::VectorXi &,
  35. const Eigen::MatrixXi &,
  36. const Eigen::MatrixXi &,
  37. const std::set<std::pair<double,int> > &,
  38. const std::vector<std::set<std::pair<double,int> >::iterator > &,
  39. const Eigen::MatrixXd &,
  40. const int,
  41. const int,
  42. const int,
  43. const int f1,
  44. const int f2)->bool
  45. {
  46. // Only subtract if we're collapsing a real face
  47. if(f1 < orig_m) m-=1;
  48. if(f2 < orig_m) m-=1;
  49. return m<=(int)max_m;
  50. };
  51. }
  52. IGL_INLINE
  53. std::function<bool(
  54. const Eigen::MatrixXd &,
  55. const Eigen::MatrixXi &,
  56. const Eigen::MatrixXi &,
  57. const Eigen::VectorXi &,
  58. const Eigen::MatrixXi &,
  59. const Eigen::MatrixXi &,
  60. const std::set<std::pair<double,int> > &,
  61. const std::vector<std::set<std::pair<double,int> >::iterator > &,
  62. const Eigen::MatrixXd &,
  63. const int,
  64. const int,
  65. const int,
  66. const int,
  67. const int)>
  68. igl::max_faces_stopping_condition(
  69. int & m,
  70. const int orig_m,
  71. const int max_m)
  72. {
  73. std::function<bool(
  74. const Eigen::MatrixXd &,
  75. const Eigen::MatrixXi &,
  76. const Eigen::MatrixXi &,
  77. const Eigen::VectorXi &,
  78. const Eigen::MatrixXi &,
  79. const Eigen::MatrixXi &,
  80. const std::set<std::pair<double,int> > &,
  81. const std::vector<std::set<std::pair<double,int> >::iterator > &,
  82. const Eigen::MatrixXd &,
  83. const int,
  84. const int,
  85. const int,
  86. const int,
  87. const int)> stopping_condition;
  88. max_faces_stopping_condition(
  89. m,orig_m,max_m,stopping_condition);
  90. return stopping_condition;
  91. }