box_simplices.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // This file is part of libigl, a simple c++ geometry processing library.
  2. //
  3. // Copyright (C) 2025 Alec Jacobson <[email protected]>
  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 "box_simplices.h"
  9. template <
  10. typename DerivedV,
  11. typename DerivedF,
  12. typename DerivedB
  13. >
  14. IGL_INLINE void igl::box_simplices(
  15. const Eigen::MatrixBase<DerivedV> & V,
  16. const Eigen::MatrixBase<DerivedF> & F,
  17. Eigen::PlainObjectBase<DerivedB> & B1,
  18. Eigen::PlainObjectBase<DerivedB> & B2)
  19. {
  20. B1.setConstant(F.rows(),V.cols(),std::numeric_limits<double>::infinity());
  21. B2.setConstant(F.rows(),V.cols(),-std::numeric_limits<double>::infinity());
  22. for(int f = 0; f < F.rows(); f++)
  23. {
  24. for(int c = 0; c < F.cols(); c++)
  25. {
  26. for(int d = 0; d < V.cols(); d++)
  27. {
  28. B1(f,d) = std::min(B1(f,d),V(F(f,c),d));
  29. B2(f,d) = std::max(B2(f,d),V(F(f,c),d));
  30. }
  31. }
  32. }
  33. }
  34. #ifdef IGL_STATIC_LIBRARY
  35. // Explicit template instantiation
  36. // generated by autoexplicit.sh
  37. template void igl::box_simplices<Eigen::Matrix<double, -1, 3, 1, -1, 3>, Eigen::Matrix<int, -1, 2, 1, -1, 2>, Eigen::Matrix<double, -1, 3, 1, -1, 3>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3>> const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 2, 1, -1, 2>> const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 1, -1, 3>>&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 1, -1, 3>>&);
  38. // generated by autoexplicit.sh
  39. template void igl::box_simplices<Eigen::Matrix<double, -1, 3, 1, -1, 3>, Eigen::Matrix<int, -1, 3, 1, -1, 3>, Eigen::Matrix<double, -1, 3, 1, -1, 3>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3>> const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3>> const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 1, -1, 3>>&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 1, -1, 3>>&);
  40. template void igl::box_simplices<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<double, -1, 3, 0, -1, 3>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3>> const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 0, -1, 3>> const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3>>&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3>>&);
  41. #endif