py_signed_distance.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. py::enum_<igl::SignedDistanceType>(m, "SignedDistanceType")
  2. .value("SIGNED_DISTANCE_TYPE_PSEUDONORMAL", igl::SIGNED_DISTANCE_TYPE_PSEUDONORMAL)
  3. .value("SIGNED_DISTANCE_TYPE_WINDING_NUMBER", igl::SIGNED_DISTANCE_TYPE_WINDING_NUMBER)
  4. .value("SIGNED_DISTANCE_TYPE_DEFAULT", igl::SIGNED_DISTANCE_TYPE_DEFAULT)
  5. .value("SIGNED_DISTANCE_TYPE_UNSIGNED", igl::SIGNED_DISTANCE_TYPE_UNSIGNED)
  6. .value("NUM_SIGNED_DISTANCE_TYPE", igl::NUM_SIGNED_DISTANCE_TYPE)
  7. .export_values();
  8. m.def("signed_distance", []
  9. (
  10. const Eigen::MatrixXd& P,
  11. const Eigen::MatrixXd& V,
  12. const Eigen::MatrixXi& F,
  13. const igl::SignedDistanceType sign_type,
  14. Eigen::MatrixXd& S,
  15. Eigen::MatrixXi& I,
  16. Eigen::MatrixXd& C,
  17. Eigen::MatrixXd& N
  18. )
  19. {
  20. Eigen::VectorXd Sv;
  21. if (S.size() != 0)
  22. Sv = S;
  23. Eigen::VectorXi Iv;
  24. if (I.size() != 0)
  25. Iv = I;
  26. return igl::signed_distance(P, V, F, sign_type, Sv, Iv, C, N);
  27. }, __doc_igl_signed_distance,
  28. py::arg("P"), py::arg("V"), py::arg("F"), py::arg("sign_type"), py::arg("S"), py::arg("I"), py::arg("C"), py::arg("N"));
  29. //m.def("signed_distance_pseudonormal", []
  30. //(
  31. // const AABB<Eigen::MatrixXd, 3> & tree,
  32. // const Eigen::MatrixXd& V,
  33. // const Eigen::MatrixXi& F,
  34. // const Eigen::MatrixXd& FN,
  35. // const Eigen::MatrixXd& VN,
  36. // const Eigen::MatrixXd& EN,
  37. // const Eigen::MatrixXi& EMAP,
  38. // const Eigen::MatrixXd& q
  39. //)
  40. //{
  41. // assert_is_VectorX("q", q);
  42. // assert_is_VectorX("EMAP",EMAP);
  43. // return igl::signed_distance_pseudonormal(tree, V, F, FN, VN, EN, EMAP, q);
  44. //}, __doc_igl_signed_distance_pseudonormal,
  45. //py::arg("tree"), py::arg("V"), py::arg("F"), py::arg("FN"), py::arg("VN"), py::arg("EN"), py::arg("EMAP"), py::arg("q"));
  46. m.def("signed_distance_pseudonormal", []
  47. (
  48. const Eigen::MatrixXd& P,
  49. const Eigen::MatrixXd& V,
  50. const Eigen::MatrixXi& F,
  51. const igl::AABB<Eigen::MatrixXd, 3> & tree,
  52. const Eigen::MatrixXd& FN,
  53. const Eigen::MatrixXd& VN,
  54. const Eigen::MatrixXd& EN,
  55. const Eigen::MatrixXi& EMAP,
  56. Eigen::MatrixXd& S,
  57. Eigen::MatrixXi& I,
  58. Eigen::MatrixXd& C,
  59. Eigen::MatrixXd& N
  60. )
  61. {
  62. assert_is_VectorX("EMAP", EMAP);
  63. Eigen::VectorXi EMAPv;
  64. if (EMAP.size() != 0)
  65. EMAPv = EMAP;
  66. Eigen::VectorXd Sv;
  67. Eigen::VectorXi Iv;
  68. igl::signed_distance_pseudonormal(P, V, F, tree, FN, VN, EN, EMAPv, Sv, Iv, C, N);
  69. S = Sv;
  70. I = Iv;
  71. }, __doc_igl_signed_distance_pseudonormal,
  72. py::arg("P"), py::arg("V"), py::arg("F"), py::arg("tree"), py::arg("FN"), py::arg("VN"), py::arg("EN"), py::arg("EMAP"), py::arg("S"), py::arg("I"), py::arg("C"), py::arg("N"));
  73. //m.def("signed_distance_pseudonormal", []
  74. //(
  75. // const AABB<Eigen::MatrixXd, 3> & tree,
  76. // const Eigen::MatrixXd& V,
  77. // const Eigen::MatrixXi& F,
  78. // const Eigen::MatrixXd& FN,
  79. // const Eigen::MatrixXd& VN,
  80. // const Eigen::MatrixXd& EN,
  81. // const Eigen::MatrixXi & EMAP,
  82. // const Eigen::MatrixXd & q,
  83. // double & s,
  84. // double & sqrd,
  85. // int & i,
  86. // Eigen::MatrixXd & c,
  87. // Eigen::MatrixXd & n
  88. //)
  89. //{
  90. // assert_is_VectorX("EMAP",EMAP);
  91. // assert_is_VectorX("q",q);
  92. // return igl::signed_distance_pseudonormal(tree, V, F, FN, VN, EN, EMAP, q, s, sqrd, i, c, n);
  93. //}, __doc_igl_signed_distance_pseudonormal,
  94. //py::arg("tree"), py::arg("V"), py::arg("F"), py::arg("FN"), py::arg("VN"), py::arg("EN"), py::arg("EMAP"), py::arg("q"), py::arg("s"), py::arg("sqrd"), py::arg("i"), py::arg("c"), py::arg("n"));
  95. //m.def("signed_distance_pseudonormal", []
  96. //(
  97. // const AABB<Eigen::MatrixXd, 2> & tree,
  98. // const Eigen::MatrixXd& V,
  99. // const Eigen::MatrixXi& F,
  100. // const Eigen::MatrixXd& FN,
  101. // const Eigen::MatrixXd& VN,
  102. // const Eigen::MatrixXd & q,
  103. // double & s,
  104. // double & sqrd,
  105. // int & i,
  106. // Eigen::MatrixXd & c,
  107. // Eigen::MatrixXd & n
  108. //)
  109. //{
  110. // assert_is_VectorX("q",q);
  111. // return igl::signed_distance_pseudonormal(tree, V, F, FN, VN, q, s, sqrd, i, c, n);
  112. //}, __doc_igl_signed_distance_pseudonormal,
  113. //py::arg("tree"), py::arg("V"), py::arg("F"), py::arg("FN"), py::arg("VN"), py::arg("q"), py::arg("s"), py::arg("sqrd"), py::arg("i"), py::arg("c"), py::arg("n"));
  114. //m.def("signed_distance_winding_number", []
  115. //(
  116. // AABB<Eigen::MatrixXd, 3> & tree,
  117. // const Eigen::MatrixXd& V,
  118. // const Eigen::MatrixXi& F,
  119. // igl::WindingNumberAABB<Eigen::Vector3d> & hier,
  120. // Eigen::RowVector3d & q
  121. //)
  122. //{
  123. // return igl::signed_distance_winding_number(tree, V, F, hier, q);
  124. //}, __doc_igl_signed_distance_winding_number,
  125. //py::arg("tree"), py::arg("V"), py::arg("F"), py::arg("hier"), py::arg("q"));