fast_winding_number.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include "../../fast_winding_number.h"
  2. #include "../../octree.h"
  3. #include "../../knn.h"
  4. #include "../../parallel_for.h"
  5. #include "point_areas.h"
  6. #include <vector>
  7. namespace igl {
  8. namespace copyleft{
  9. namespace cgal{
  10. template <typename DerivedP, typename DerivedN, typename DerivedQ,
  11. typename BetaType, typename DerivedWN>
  12. IGL_INLINE void fast_winding_number(const Eigen::MatrixBase<DerivedP>& P,
  13. const Eigen::MatrixBase<DerivedN>& N,
  14. const Eigen::MatrixBase<DerivedQ>& Q,
  15. const int expansion_order,
  16. const BetaType beta,
  17. Eigen::PlainObjectBase<DerivedWN>& WN
  18. ){
  19. typedef typename DerivedWN::Scalar real;
  20. typedef typename Eigen::Matrix<real,Eigen::Dynamic,Eigen::Dynamic>
  21. RealMatrix;
  22. std::vector<std::vector<int> > point_indices;
  23. Eigen::Matrix<int,Eigen::Dynamic,8> CH;
  24. Eigen::Matrix<real,Eigen::Dynamic,3> CN;
  25. Eigen::Matrix<real,Eigen::Dynamic,1> W;
  26. Eigen::MatrixXi I;
  27. Eigen::Matrix<real,Eigen::Dynamic,1> A;
  28. octree(P,point_indices,CH,CN,W);
  29. knn(P,21,point_indices,CH,CN,W,I);
  30. point_areas(P,I,N,A);
  31. Eigen::Matrix<real,Eigen::Dynamic,Eigen::Dynamic> EC;
  32. Eigen::Matrix<real,Eigen::Dynamic,3> CM;
  33. Eigen::Matrix<real,Eigen::Dynamic,1> R;
  34. igl::fast_winding_number(P,N,A,point_indices,CH,
  35. expansion_order,CM,R,EC);
  36. igl::fast_winding_number(P,N,A,point_indices,CH,
  37. CM,R,EC,Q,beta,WN);
  38. }
  39. template <typename DerivedP, typename DerivedN,
  40. typename DerivedQ, typename DerivedWN>
  41. IGL_INLINE void fast_winding_number(
  42. const Eigen::MatrixBase<DerivedP>& P,
  43. const Eigen::MatrixBase<DerivedN>& N,
  44. const Eigen::MatrixBase<DerivedQ>& Q,
  45. Eigen::PlainObjectBase<DerivedWN>& WN
  46. ){
  47. fast_winding_number(P,N,Q,2,2.0,WN);
  48. }
  49. }
  50. }
  51. }