infinite_cost_stopping_condition.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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 "infinite_cost_stopping_condition.h"
  9. IGL_INLINE void igl::infinite_cost_stopping_condition(
  10. const std::function<void(
  11. const int,
  12. const Eigen::MatrixXd &,
  13. const Eigen::MatrixXi &,
  14. const Eigen::MatrixXi &,
  15. const Eigen::VectorXi &,
  16. const Eigen::MatrixXi &,
  17. const Eigen::MatrixXi &,
  18. double &,
  19. Eigen::RowVectorXd &)> & cost_and_placement,
  20. std::function<bool(
  21. const Eigen::MatrixXd &,
  22. const Eigen::MatrixXi &,
  23. const Eigen::MatrixXi &,
  24. const Eigen::VectorXi &,
  25. const Eigen::MatrixXi &,
  26. const Eigen::MatrixXi &,
  27. const std::set<std::pair<double,int> > &,
  28. const std::vector<std::set<std::pair<double,int> >::iterator > &,
  29. const Eigen::MatrixXd &,
  30. const int,
  31. const int,
  32. const int,
  33. const int,
  34. const int)> & stopping_condition)
  35. {
  36. stopping_condition =
  37. [&cost_and_placement]
  38. (
  39. const Eigen::MatrixXd & V,
  40. const Eigen::MatrixXi & F,
  41. const Eigen::MatrixXi & E,
  42. const Eigen::VectorXi & EMAP,
  43. const Eigen::MatrixXi & EF,
  44. const Eigen::MatrixXi & EI,
  45. const std::set<std::pair<double,int> > & Q,
  46. const std::vector<std::set<std::pair<double,int> >::iterator > & Qit,
  47. const Eigen::MatrixXd & C,
  48. const int e,
  49. const int /*e1*/,
  50. const int /*e2*/,
  51. const int /*f1*/,
  52. const int /*f2*/)->bool
  53. {
  54. Eigen::RowVectorXd p;
  55. double cost;
  56. cost_and_placement(e,V,F,E,EMAP,EF,EI,cost,p);
  57. return std::isinf(cost);
  58. };
  59. }
  60. IGL_INLINE
  61. std::function<bool(
  62. const Eigen::MatrixXd &,
  63. const Eigen::MatrixXi &,
  64. const Eigen::MatrixXi &,
  65. const Eigen::VectorXi &,
  66. const Eigen::MatrixXi &,
  67. const Eigen::MatrixXi &,
  68. const std::set<std::pair<double,int> > &,
  69. const std::vector<std::set<std::pair<double,int> >::iterator > &,
  70. const Eigen::MatrixXd &,
  71. const int,
  72. const int,
  73. const int,
  74. const int,
  75. const int)>
  76. igl::infinite_cost_stopping_condition(
  77. const std::function<void(
  78. const int,
  79. const Eigen::MatrixXd &,
  80. const Eigen::MatrixXi &,
  81. const Eigen::MatrixXi &,
  82. const Eigen::VectorXi &,
  83. const Eigen::MatrixXi &,
  84. const Eigen::MatrixXi &,
  85. double &,
  86. Eigen::RowVectorXd &)> & cost_and_placement)
  87. {
  88. std::function<bool(
  89. const Eigen::MatrixXd &,
  90. const Eigen::MatrixXi &,
  91. const Eigen::MatrixXi &,
  92. const Eigen::VectorXi &,
  93. const Eigen::MatrixXi &,
  94. const Eigen::MatrixXi &,
  95. const std::set<std::pair<double,int> > &,
  96. const std::vector<std::set<std::pair<double,int> >::iterator > &,
  97. const Eigen::MatrixXd &,
  98. const int,
  99. const int,
  100. const int,
  101. const int,
  102. const int)> stopping_condition;
  103. infinite_cost_stopping_condition(cost_and_placement,stopping_condition);
  104. return stopping_condition;
  105. }