py_signed_distance.cpp 4.8 KB

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