liblaf-melon 0.2.4__tar.gz → 0.2.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. liblaf_melon-0.2.6/PKG-INFO +154 -0
  2. liblaf_melon-0.2.6/README.md +109 -0
  3. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/pyproject.toml +12 -23
  4. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/__init__.pyi +12 -4
  5. liblaf_melon-0.2.6/src/liblaf/melon/__main__.py +4 -0
  6. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/_version.py +2 -2
  7. liblaf_melon-0.2.6/src/liblaf/melon/cli/__init__.pyi +3 -0
  8. liblaf_melon-0.2.6/src/liblaf/melon/cli/__main__.py +4 -0
  9. liblaf_melon-0.2.6/src/liblaf/melon/cli/_app.py +25 -0
  10. liblaf_melon-0.2.6/src/liblaf/melon/cli/_info.py +43 -0
  11. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/abc/_reader.py +1 -1
  12. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/abc/_writer.py +1 -1
  13. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/paraview/_series_writer.py +1 -1
  14. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/point_set/convert/_convert.py +2 -0
  15. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/point_set/convert/_poly_data.py +5 -1
  16. liblaf_melon-0.2.6/src/liblaf/melon/io/pyvista/point_set/convert/_trimesh.py +21 -0
  17. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/poly_data/reader/_obj.py +1 -1
  18. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/wrap/landmarks/_reader.py +1 -1
  19. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/wrap/landmarks/_writer.py +1 -1
  20. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/wrap/polygons/_reader.py +1 -1
  21. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/wrap/polygons/_writer.py +1 -1
  22. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/plugin/_mesh_fix.py +8 -5
  23. liblaf_melon-0.2.6/src/liblaf/melon/proximity/__init__.pyi +21 -0
  24. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/proximity/_abc.py +5 -5
  25. liblaf_melon-0.2.6/src/liblaf/melon/proximity/_nearest.py +27 -0
  26. liblaf_melon-0.2.6/src/liblaf/melon/proximity/_nearest_point.py +172 -0
  27. liblaf_melon-0.2.6/src/liblaf/melon/proximity/_nearest_point_on_surface.py +138 -0
  28. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/triangle/__init__.pyi +2 -0
  29. liblaf_melon-0.2.6/src/liblaf/melon/triangle/_is_volume.py +10 -0
  30. liblaf_melon-0.2.6/src/liblaf/melon/utils/__init__.py +3 -0
  31. liblaf_melon-0.2.4/PKG-INFO +0 -53
  32. liblaf_melon-0.2.4/docs/README.md +0 -1
  33. liblaf_melon-0.2.4/src/liblaf/melon/proximity/__init__.pyi +0 -12
  34. liblaf_melon-0.2.4/src/liblaf/melon/proximity/_nearest.py +0 -11
  35. liblaf_melon-0.2.4/src/liblaf/melon/proximity/_nearest_point.py +0 -44
  36. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/.gitignore +0 -0
  37. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/LICENSE +0 -0
  38. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/__init__.py +0 -0
  39. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/_version.pyi +0 -0
  40. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/barycentric/__init__.py +0 -0
  41. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/barycentric/__init__.pyi +0 -0
  42. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/barycentric/_points.py +0 -0
  43. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/barycentric/_sample.py +0 -0
  44. {liblaf_melon-0.2.4/src/liblaf/melon/io → liblaf_melon-0.2.6/src/liblaf/melon/cli}/__init__.py +0 -0
  45. {liblaf_melon-0.2.4/src/liblaf/melon/io/abc → liblaf_melon-0.2.6/src/liblaf/melon/io}/__init__.py +0 -0
  46. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/__init__.pyi +0 -0
  47. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/_save.py +0 -0
  48. {liblaf_melon-0.2.4/src/liblaf/melon/io/paraview → liblaf_melon-0.2.6/src/liblaf/melon/io/abc}/__init__.py +0 -0
  49. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/abc/__init__.pyi +0 -0
  50. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/abc/_converter.py +0 -0
  51. {liblaf_melon-0.2.4/src/liblaf/melon/io/pyvista → liblaf_melon-0.2.6/src/liblaf/melon/io/paraview}/__init__.py +0 -0
  52. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/paraview/__init__.pyi +0 -0
  53. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/paraview/_pvd_writer.py +0 -0
  54. {liblaf_melon-0.2.4/src/liblaf/melon/io/pyvista/point_set → liblaf_melon-0.2.6/src/liblaf/melon/io/pyvista}/__init__.py +0 -0
  55. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/__init__.pyi +0 -0
  56. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/_convert.py +0 -0
  57. {liblaf_melon-0.2.4/src/liblaf/melon/io/pyvista/point_set/convert → liblaf_melon-0.2.6/src/liblaf/melon/io/pyvista/point_set}/__init__.py +0 -0
  58. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/point_set/__init__.pyi +0 -0
  59. {liblaf_melon-0.2.4/src/liblaf/melon/io/pyvista/poly_data → liblaf_melon-0.2.6/src/liblaf/melon/io/pyvista/point_set/convert}/__init__.py +0 -0
  60. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/point_set/convert/__init__.pyi +0 -0
  61. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/point_set/convert/_array.py +0 -0
  62. {liblaf_melon-0.2.4/src/liblaf/melon/io/pyvista/poly_data/convert → liblaf_melon-0.2.6/src/liblaf/melon/io/pyvista/poly_data}/__init__.py +0 -0
  63. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/poly_data/__init__.pyi +0 -0
  64. {liblaf_melon-0.2.4/src/liblaf/melon/io/pyvista/poly_data/reader → liblaf_melon-0.2.6/src/liblaf/melon/io/pyvista/poly_data/convert}/__init__.py +0 -0
  65. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/poly_data/convert/__init__.pyi +0 -0
  66. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/poly_data/convert/_convert.py +0 -0
  67. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/poly_data/convert/_mapping.py +0 -0
  68. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/poly_data/convert/_wrap.py +0 -0
  69. {liblaf_melon-0.2.4/src/liblaf/melon/io/pyvista/poly_data/writer → liblaf_melon-0.2.6/src/liblaf/melon/io/pyvista/poly_data/reader}/__init__.py +0 -0
  70. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/poly_data/reader/__init__.pyi +0 -0
  71. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/poly_data/reader/_load.py +0 -0
  72. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/poly_data/reader/_pyvista.py +0 -0
  73. {liblaf_melon-0.2.4/src/liblaf/melon/io/pyvista/unstructured_grid → liblaf_melon-0.2.6/src/liblaf/melon/io/pyvista/poly_data/writer}/__init__.py +0 -0
  74. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/poly_data/writer/__init__.pyi +0 -0
  75. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/poly_data/writer/_pyvista.py +0 -0
  76. {liblaf_melon-0.2.4/src/liblaf/melon/io/pyvista/unstructured_grid/convert → liblaf_melon-0.2.6/src/liblaf/melon/io/pyvista/unstructured_grid}/__init__.py +0 -0
  77. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/unstructured_grid/__init__.pyi +0 -0
  78. {liblaf_melon-0.2.4/src/liblaf/melon/io/pyvista/unstructured_grid/reader → liblaf_melon-0.2.6/src/liblaf/melon/io/pyvista/unstructured_grid/convert}/__init__.py +0 -0
  79. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/unstructured_grid/convert/__init__.pyi +0 -0
  80. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/unstructured_grid/convert/_convert.py +0 -0
  81. {liblaf_melon-0.2.4/src/liblaf/melon/io/pyvista/unstructured_grid/writer → liblaf_melon-0.2.6/src/liblaf/melon/io/pyvista/unstructured_grid/reader}/__init__.py +0 -0
  82. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/unstructured_grid/reader/__init__.pyi +0 -0
  83. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/unstructured_grid/reader/_pyvista.py +0 -0
  84. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/unstructured_grid/reader/_reader.py +0 -0
  85. {liblaf_melon-0.2.4/src/liblaf/melon/io/trimesh → liblaf_melon-0.2.6/src/liblaf/melon/io/pyvista/unstructured_grid/writer}/__init__.py +0 -0
  86. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/unstructured_grid/writer/__init__.pyi +0 -0
  87. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/pyvista/unstructured_grid/writer/_pyvista.py +0 -0
  88. {liblaf_melon-0.2.4/src/liblaf/melon/io/trimesh/convert → liblaf_melon-0.2.6/src/liblaf/melon/io/trimesh}/__init__.py +0 -0
  89. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/trimesh/__init__.pyi +0 -0
  90. {liblaf_melon-0.2.4/src/liblaf/melon/io/trimesh/reader → liblaf_melon-0.2.6/src/liblaf/melon/io/trimesh/convert}/__init__.py +0 -0
  91. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/trimesh/convert/__init__.pyi +0 -0
  92. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/trimesh/convert/_convert.py +0 -0
  93. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/trimesh/convert/_poly_data.py +0 -0
  94. {liblaf_melon-0.2.4/src/liblaf/melon/io/trimesh/writer → liblaf_melon-0.2.6/src/liblaf/melon/io/trimesh/reader}/__init__.py +0 -0
  95. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/trimesh/reader/__init__.pyi +0 -0
  96. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/trimesh/reader/_reader.py +0 -0
  97. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/trimesh/reader/_trimesh.py +0 -0
  98. {liblaf_melon-0.2.4/src/liblaf/melon/io/wrap → liblaf_melon-0.2.6/src/liblaf/melon/io/trimesh/writer}/__init__.py +0 -0
  99. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/trimesh/writer/__init__.pyi +0 -0
  100. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/trimesh/writer/_trimesh.py +0 -0
  101. {liblaf_melon-0.2.4/src/liblaf/melon/io/wrap/landmarks → liblaf_melon-0.2.6/src/liblaf/melon/io/wrap}/__init__.py +0 -0
  102. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/wrap/__init__.pyi +0 -0
  103. {liblaf_melon-0.2.4/src/liblaf/melon/io/wrap/polygons → liblaf_melon-0.2.6/src/liblaf/melon/io/wrap/landmarks}/__init__.py +0 -0
  104. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/wrap/landmarks/__init__.pyi +0 -0
  105. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/wrap/landmarks/_utils.py +0 -0
  106. {liblaf_melon-0.2.4/src/liblaf/melon/mesh → liblaf_melon-0.2.6/src/liblaf/melon/io/wrap/polygons}/__init__.py +0 -0
  107. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/wrap/polygons/__init__.pyi +0 -0
  108. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/io/wrap/polygons/_utils.py +0 -0
  109. {liblaf_melon-0.2.4/src/liblaf/melon/plugin → liblaf_melon-0.2.6/src/liblaf/melon/mesh}/__init__.py +0 -0
  110. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/mesh/__init__.pyi +0 -0
  111. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/mesh/_graph.py +0 -0
  112. {liblaf_melon-0.2.4/src/liblaf/melon/plugin/wrap → liblaf_melon-0.2.6/src/liblaf/melon/plugin}/__init__.py +0 -0
  113. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/plugin/__init__.pyi +0 -0
  114. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/plugin/_tetwild.py +0 -0
  115. {liblaf_melon-0.2.4/src/liblaf/melon/proximity → liblaf_melon-0.2.6/src/liblaf/melon/plugin/wrap}/__init__.py +0 -0
  116. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/plugin/wrap/__init__.pyi +0 -0
  117. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/plugin/wrap/_annotate_landmarks.py +0 -0
  118. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/plugin/wrap/_fast_wrapping.py +0 -0
  119. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/plugin/wrap/annotate-landmarks.wrap +0 -0
  120. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/plugin/wrap/fast-wrapping.wrap +0 -0
  121. {liblaf_melon-0.2.4/src/liblaf/melon/tetra → liblaf_melon-0.2.6/src/liblaf/melon/proximity}/__init__.py +0 -0
  122. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/py.typed +0 -0
  123. {liblaf_melon-0.2.4/src/liblaf/melon/triangle → liblaf_melon-0.2.6/src/liblaf/melon/tetra}/__init__.py +0 -0
  124. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/tetra/__init__.pyi +0 -0
  125. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/tetra/_flip.py +0 -0
  126. {liblaf_melon-0.2.4/src/liblaf/melon/typed → liblaf_melon-0.2.6/src/liblaf/melon/triangle}/__init__.py +0 -0
  127. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/triangle/_boolean.py +0 -0
  128. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/triangle/_compute_edge_length.py +0 -0
  129. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/triangle/_extract.py +0 -0
  130. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/triangle/_ray.py +0 -0
  131. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/triangle/_selection.py +0 -0
  132. {liblaf_melon-0.2.4/src/liblaf/melon/utils → liblaf_melon-0.2.6/src/liblaf/melon/typed}/__init__.py +0 -0
  133. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/typed/__init__.pyi +0 -0
  134. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/typed/_misc.py +0 -0
  135. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/utils/__init__.pyi +0 -0
  136. {liblaf_melon-0.2.4 → liblaf_melon-0.2.6}/src/liblaf/melon/utils/_typing.py +0 -0
@@ -0,0 +1,154 @@
1
+ Metadata-Version: 2.4
2
+ Name: liblaf-melon
3
+ Version: 0.2.6
4
+ Summary: Add your description here
5
+ Project-URL: Changelog, https://github.com/liblaf/melon/blob/main/CHANGELOG.md
6
+ Project-URL: Documentation, https://liblaf.github.io/melon/
7
+ Project-URL: Homepage, https://github.com/liblaf/melon
8
+ Project-URL: Issue Tracker, https://github.com/liblaf/melon/issues
9
+ Project-URL: Release Notes, https://github.com/liblaf/melon/releases
10
+ Project-URL: Source Code, https://github.com/liblaf/melon
11
+ Author-email: liblaf <30631553+liblaf@users.noreply.github.com>
12
+ License-Expression: MIT
13
+ License-File: LICENSE
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Typing :: Typed
23
+ Requires-Python: >=3.12
24
+ Requires-Dist: attrs<26,>=25.3.0
25
+ Requires-Dist: cyclopts<4,>=3.16.1
26
+ Requires-Dist: einops<0.9,>=0.8.1
27
+ Requires-Dist: glom<25,>=24.11.0
28
+ Requires-Dist: jaxtyping<0.4,>=0.3.2
29
+ Requires-Dist: lazy-loader<0.5,>=0.4
30
+ Requires-Dist: liblaf-grapes<0.2,>=0.1.27
31
+ Requires-Dist: loguru<0.8,>=0.7.3
32
+ Requires-Dist: meshio<6,>=5.3.5
33
+ Requires-Dist: networkx<4,>=3.4.2
34
+ Requires-Dist: numpy
35
+ Requires-Dist: polars<2,>=1.30.0
36
+ Requires-Dist: pydantic<3,>=2.11.4
37
+ Requires-Dist: pydicom<4,>=3.0.1
38
+ Requires-Dist: pymeshfix<0.18,>=0.17.1
39
+ Requires-Dist: pyvista<0.46,>=0.45.2
40
+ Requires-Dist: rich<15,>=14.0.0
41
+ Requires-Dist: scipy
42
+ Requires-Dist: tinyobjloader==2.0.0rc13
43
+ Requires-Dist: trimesh[easy]<5,>=4.6.10
44
+ Description-Content-Type: text/markdown
45
+
46
+ <div align="center" markdown><a name="readme-top"></a>
47
+
48
+ <img src="https://raw.githubusercontent.com/microsoft/fluentui-emoji/main/assets/Melon/3D/melon_3d.png" style="height: 120px" />
49
+ <img src="https://gw.alipayobjects.com/zos/kitchen/qJ3l3EPsdW/split.svg" style="height: 120px" />
50
+ <img src="https://api.iconify.design/logos/python.svg" style="height: 120px; padding: 12px" />
51
+
52
+ # Melon
53
+
54
+ TODO: DESCRIPTION <br />
55
+ [**Explore the docs »**](https://liblaf.github.io/melon/)
56
+
57
+ [![PyPI - Downloads](https://img.shields.io/pypi/dm/liblaf-melon?logo=PyPI&label=Downloads)](https://pypi.org/project/liblaf-melon)
58
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/liblaf-melon?logo=Python&label=Python)](https://pypi.org/project/liblaf-melon)
59
+ [![PyPI - Version](https://img.shields.io/pypi/v/liblaf-melon?logo=PyPI&label=PyPI)](https://pypi.org/project/liblaf-melon)
60
+ [![Codecov](https://img.shields.io/codecov/c/github/liblaf/melon?logo=Codecov&label=Coverage)](https://codecov.io/gh/liblaf/melon)
61
+ [![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/liblaf/melon/test.yaml?logo=GitHub%20Actions&label=Test)](https://github.com/liblaf/melon/actions/workflows/test.yaml)
62
+ <br />
63
+ [![GitHub Contributors](https://img.shields.io/github/contributors/liblaf/melon?logo=GitHub&label=Contributors)](https://github.com/liblaf/melon/graphs/contributors)
64
+ [![GitHub Forks](https://img.shields.io/github/forks/liblaf/melon)](https://github.com/liblaf/melon/forks)
65
+ [![GitHub Repo Stars](https://img.shields.io/github/stars/liblaf/melon)](https://github.com/liblaf/melon/stargazers)
66
+ [![GitHub Issues](https://img.shields.io/github/issues/liblaf/melon?logo=GitHub&label=Issues)](https://github.com/liblaf/melon/issues)
67
+ [![GitHub License](https://img.shields.io/github/license/liblaf/melon?label=License)](https://github.com/liblaf/melon/blob/main/LICENSE)
68
+
69
+ [Changelog](https://github.com/liblaf/melon/blob/main/CHANGELOG.md) · [Report Bug](https://github.com/liblaf/melon/issues) · [Request Feature](https://github.com/liblaf/melon/issues)
70
+
71
+ ![](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png)
72
+
73
+ </div>
74
+
75
+ ## ✨ Features
76
+
77
+ - [x] ✨ **TODO:** FEATURES;
78
+
79
+ <div align="right" markdown>
80
+
81
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
82
+
83
+ </div>
84
+
85
+ ## 📦 Installation
86
+
87
+ To install `liblaf-melon`, run the following command:
88
+
89
+ ```bash
90
+ $ uv add liblaf-melon
91
+ ```
92
+
93
+ <div align="right" markdown>
94
+
95
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
96
+
97
+ </div>
98
+
99
+ ## ⌨️ Local Development
100
+
101
+ You can use Github Codespaces for online development:
102
+
103
+ [![](https://github.com/codespaces/badge.svg)](https://codespaces.new/liblaf/melon)
104
+
105
+ Or clone it for local development:
106
+
107
+ ```bash
108
+ $ gh repo clone liblaf/melon
109
+ $ cd melon
110
+ $ just test
111
+ ```
112
+
113
+ <div align="right" markdown>
114
+
115
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
116
+
117
+ </div>
118
+
119
+ ## 🤝 Contributing
120
+
121
+ Contributions of all types are more than welcome, if you are interested in contributing code, feel free to check out our GitHub [Issues](https://github.com/liblaf/melon/issues) to get stuck in to show us what you're made of.
122
+
123
+ [![](https://img.shields.io/badge/%F0%9F%A4%AF%20PR%20WELCOME-%E2%86%92-ffcb47?labelColor=black&style=for-the-badge)](https://github.com/liblaf/melon/pulls)
124
+
125
+ [![](https://contrib.rocks/image?repo=liblaf%2Fmelon)](https://github.com/liblaf/melon/graphs/contributors)
126
+
127
+ <div align="right" markdown>
128
+
129
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
130
+
131
+ </div>
132
+
133
+ ## 🔗 Links
134
+
135
+ ### More Projects
136
+
137
+ - **[🍇 grapes](https://github.com/liblaf/grapes)** - Powerful Python utilities for logging, timing, and more, making development smoother!
138
+
139
+ ### Credits
140
+
141
+ - **Python** - <https://www.python.org/>
142
+
143
+ <div align="right" markdown>
144
+
145
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
146
+
147
+ </div>
148
+
149
+ ---
150
+
151
+ #### 📝 License
152
+
153
+ Copyright © 2025 [liblaf](https://github.com/liblaf). <br />
154
+ This project is [MIT](https://github.com/liblaf/melon/blob/main/LICENSE) licensed.
@@ -0,0 +1,109 @@
1
+ <div align="center" markdown><a name="readme-top"></a>
2
+
3
+ <img src="https://raw.githubusercontent.com/microsoft/fluentui-emoji/main/assets/Melon/3D/melon_3d.png" style="height: 120px" />
4
+ <img src="https://gw.alipayobjects.com/zos/kitchen/qJ3l3EPsdW/split.svg" style="height: 120px" />
5
+ <img src="https://api.iconify.design/logos/python.svg" style="height: 120px; padding: 12px" />
6
+
7
+ # Melon
8
+
9
+ TODO: DESCRIPTION <br />
10
+ [**Explore the docs »**](https://liblaf.github.io/melon/)
11
+
12
+ [![PyPI - Downloads](https://img.shields.io/pypi/dm/liblaf-melon?logo=PyPI&label=Downloads)](https://pypi.org/project/liblaf-melon)
13
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/liblaf-melon?logo=Python&label=Python)](https://pypi.org/project/liblaf-melon)
14
+ [![PyPI - Version](https://img.shields.io/pypi/v/liblaf-melon?logo=PyPI&label=PyPI)](https://pypi.org/project/liblaf-melon)
15
+ [![Codecov](https://img.shields.io/codecov/c/github/liblaf/melon?logo=Codecov&label=Coverage)](https://codecov.io/gh/liblaf/melon)
16
+ [![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/liblaf/melon/test.yaml?logo=GitHub%20Actions&label=Test)](https://github.com/liblaf/melon/actions/workflows/test.yaml)
17
+ <br />
18
+ [![GitHub Contributors](https://img.shields.io/github/contributors/liblaf/melon?logo=GitHub&label=Contributors)](https://github.com/liblaf/melon/graphs/contributors)
19
+ [![GitHub Forks](https://img.shields.io/github/forks/liblaf/melon)](https://github.com/liblaf/melon/forks)
20
+ [![GitHub Repo Stars](https://img.shields.io/github/stars/liblaf/melon)](https://github.com/liblaf/melon/stargazers)
21
+ [![GitHub Issues](https://img.shields.io/github/issues/liblaf/melon?logo=GitHub&label=Issues)](https://github.com/liblaf/melon/issues)
22
+ [![GitHub License](https://img.shields.io/github/license/liblaf/melon?label=License)](https://github.com/liblaf/melon/blob/main/LICENSE)
23
+
24
+ [Changelog](https://github.com/liblaf/melon/blob/main/CHANGELOG.md) · [Report Bug](https://github.com/liblaf/melon/issues) · [Request Feature](https://github.com/liblaf/melon/issues)
25
+
26
+ ![](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png)
27
+
28
+ </div>
29
+
30
+ ## ✨ Features
31
+
32
+ - [x] ✨ **TODO:** FEATURES;
33
+
34
+ <div align="right" markdown>
35
+
36
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
37
+
38
+ </div>
39
+
40
+ ## 📦 Installation
41
+
42
+ To install `liblaf-melon`, run the following command:
43
+
44
+ ```bash
45
+ $ uv add liblaf-melon
46
+ ```
47
+
48
+ <div align="right" markdown>
49
+
50
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
51
+
52
+ </div>
53
+
54
+ ## ⌨️ Local Development
55
+
56
+ You can use Github Codespaces for online development:
57
+
58
+ [![](https://github.com/codespaces/badge.svg)](https://codespaces.new/liblaf/melon)
59
+
60
+ Or clone it for local development:
61
+
62
+ ```bash
63
+ $ gh repo clone liblaf/melon
64
+ $ cd melon
65
+ $ just test
66
+ ```
67
+
68
+ <div align="right" markdown>
69
+
70
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
71
+
72
+ </div>
73
+
74
+ ## 🤝 Contributing
75
+
76
+ Contributions of all types are more than welcome, if you are interested in contributing code, feel free to check out our GitHub [Issues](https://github.com/liblaf/melon/issues) to get stuck in to show us what you're made of.
77
+
78
+ [![](https://img.shields.io/badge/%F0%9F%A4%AF%20PR%20WELCOME-%E2%86%92-ffcb47?labelColor=black&style=for-the-badge)](https://github.com/liblaf/melon/pulls)
79
+
80
+ [![](https://contrib.rocks/image?repo=liblaf%2Fmelon)](https://github.com/liblaf/melon/graphs/contributors)
81
+
82
+ <div align="right" markdown>
83
+
84
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
85
+
86
+ </div>
87
+
88
+ ## 🔗 Links
89
+
90
+ ### More Projects
91
+
92
+ - **[🍇 grapes](https://github.com/liblaf/grapes)** - Powerful Python utilities for logging, timing, and more, making development smoother!
93
+
94
+ ### Credits
95
+
96
+ - **Python** - <https://www.python.org/>
97
+
98
+ <div align="right" markdown>
99
+
100
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
101
+
102
+ </div>
103
+
104
+ ---
105
+
106
+ #### 📝 License
107
+
108
+ Copyright © 2025 [liblaf](https://github.com/liblaf). <br />
109
+ This project is [MIT](https://github.com/liblaf/melon/blob/main/LICENSE) licensed.
@@ -7,11 +7,10 @@ requires = ["hatch-vcs", "hatchling"]
7
7
 
8
8
  [dependency-groups]
9
9
  build = ["check-wheel-contents", "hatch", "twine"]
10
- dev = ["icecream"]
10
+ dev = ["icecream", "liblaf-cherries>=0.1.2,<0.2", "pygltflib"]
11
11
  docs = [
12
12
  "gitpython",
13
13
  "mdx-truly-sane-lists",
14
- "mike",
15
14
  "mkdocs",
16
15
  "mkdocs-autorefs",
17
16
  "mkdocs-gen-files",
@@ -51,40 +50,33 @@ classifiers = [
51
50
  ]
52
51
  dependencies = [
53
52
  "attrs>=25.3.0,<26",
53
+ "cyclopts>=3.16.1,<4",
54
54
  "einops>=0.8.1,<0.9",
55
- "fast-simplification>=0.1.11,<0.2",
56
55
  "glom>=24.11.0,<25",
57
56
  "jaxtyping>=0.3.2,<0.4",
58
57
  "lazy-loader>=0.4,<0.5",
59
- "liblaf-cherries>=0.0.13,<0.0.14",
60
- "liblaf-grapes>=0.1.23,<0.2",
58
+ "liblaf-grapes>=0.1.27,<0.2",
61
59
  "loguru>=0.7.3,<0.8",
62
- "matplotlib>=3.10.3,<4",
63
60
  "meshio>=5.3.5,<6",
64
- "numpy>=2.2.5,<3",
65
- "pandas>=2.2.3,<3",
66
- "polars>=1.29.0,<2",
67
- "pooch>=1.8.2,<2",
68
- "pyacvd>=0.3.2,<0.4",
61
+ "networkx>=3.4.2,<4",
62
+ "numpy",
63
+ "polars>=1.30.0,<2",
69
64
  "pydantic>=2.11.4,<3",
70
65
  "pydicom>=3.0.1,<4",
71
- "pygltflib>=1.16.4,<2",
72
66
  "pymeshfix>=0.17.1,<0.18",
73
- "pyvista>=0.45.1,<0.46",
67
+ "pyvista>=0.45.2,<0.46",
74
68
  "rich>=14.0.0,<15",
75
- "scipy>=1.15.2,<2",
76
- "seaborn>=0.13.2,<0.14",
77
- "tinyobjloader>=2.0.0rc13,<3",
78
- "trimesh[easy]>=4.6.8,<5",
79
- "typer>=0.15.3,<0.16",
69
+ "scipy",
70
+ "tinyobjloader==2.0.0rc13",
71
+ "trimesh[easy]>=4.6.10,<5",
80
72
  ]
81
73
  description = "Add your description here"
82
74
  dynamic = ["version"]
83
75
  keywords = []
84
76
  license = "MIT"
85
77
  name = "liblaf-melon"
86
- readme = "docs/README.md"
87
- requires-python = ">=3.12,<3.13"
78
+ readme = "README.md"
79
+ requires-python = ">=3.12"
88
80
 
89
81
  [project.scripts]
90
82
  melon = "liblaf.melon.cli:main"
@@ -127,9 +119,6 @@ platforms = ["linux-64"]
127
119
  [tool.pixi.pypi-dependencies]
128
120
  "liblaf-melon" = { editable = true, path = "." }
129
121
 
130
- [tool.pixi.pypi-options]
131
- index-url = "https://mirrors.cernet.edu.cn/pypi/web/simple"
132
-
133
122
  [tool.pixi.system-requirements]
134
123
  cuda = "12"
135
124
  libc = { family = "glibc", version = "2.41" }
@@ -18,19 +18,27 @@ from .io import (
18
18
  )
19
19
  from .plugin import annotate_landmarks, fast_wrapping, mesh_fix, tetwild
20
20
  from .proximity import (
21
- Nearest,
21
+ NearestAlgorithm,
22
+ NearestAlgorithmPrepared,
22
23
  NearestPoint,
24
+ NearestPointOnSurface,
25
+ NearestPointOnSurfacePrepared,
26
+ NearestPointOnSurfaceResult,
23
27
  NearestPointPrepared,
24
- NearestPrepared,
28
+ NearestPointResult,
25
29
  NearestResult,
26
30
  nearest,
27
31
  )
28
32
 
29
33
  __all__ = [
30
- "Nearest",
34
+ "NearestAlgorithm",
35
+ "NearestAlgorithmPrepared",
31
36
  "NearestPoint",
37
+ "NearestPointOnSurface",
38
+ "NearestPointOnSurfacePrepared",
39
+ "NearestPointOnSurfaceResult",
32
40
  "NearestPointPrepared",
33
- "NearestPrepared",
41
+ "NearestPointResult",
34
42
  "NearestResult",
35
43
  "PVDWriter",
36
44
  "SeriesWriter",
@@ -0,0 +1,4 @@
1
+ from .cli import main
2
+
3
+ if __name__ == "__main__":
4
+ main()
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.2.4'
21
- __version_tuple__ = version_tuple = (0, 2, 4)
20
+ __version__ = version = '0.2.6'
21
+ __version_tuple__ = version_tuple = (0, 2, 6)
@@ -0,0 +1,3 @@
1
+ from ._app import app, main
2
+
3
+ __all__ = ["app", "main"]
@@ -0,0 +1,4 @@
1
+ from ._app import main
2
+
3
+ if __name__ == "__main__":
4
+ main()
@@ -0,0 +1,25 @@
1
+ from typing import Annotated
2
+
3
+ import cyclopts
4
+
5
+ from liblaf import grapes
6
+ from liblaf.melon import _version
7
+
8
+ from . import _info
9
+
10
+ app = cyclopts.App(name="melon", version=_version.__version__)
11
+
12
+
13
+ @app.meta.default
14
+ def init(
15
+ *tokens: Annotated[str, cyclopts.Parameter(show=False, allow_leading_hyphen=True)],
16
+ ) -> None:
17
+ grapes.init_logging()
18
+ app(tokens)
19
+
20
+
21
+ app.command(_info.info)
22
+
23
+
24
+ def main() -> None:
25
+ app.meta()
@@ -0,0 +1,43 @@
1
+ from collections.abc import Container
2
+ from pathlib import Path
3
+
4
+ import pyvista as pv
5
+ import rich.pretty
6
+
7
+ from liblaf.melon import io
8
+
9
+ POLY_DATA_SUFFIXES: Container[str] = {".obj", ".off", ".ply", ".stl", ".vtp"}
10
+ UNSTRUCTURED_GRID_SUFFIXES: Container[str] = {".msh", ".vtu"}
11
+
12
+
13
+ def info(
14
+ path: Path,
15
+ /,
16
+ *,
17
+ point_data: bool = True,
18
+ cell_data: bool = True,
19
+ field_data: bool = True,
20
+ field_data_values: bool = False,
21
+ user_dict: bool = True,
22
+ ) -> None:
23
+ if path.suffix in POLY_DATA_SUFFIXES:
24
+ mesh: pv.PolyData = io.load_poly_data(path)
25
+ elif path.suffix in UNSTRUCTURED_GRID_SUFFIXES:
26
+ mesh: pv.UnstructuredGrid = io.load_unstructured_grid(path)
27
+ else:
28
+ msg: str = f"Unsupported file format: {path.suffix}"
29
+ raise ValueError(msg)
30
+ rich.pretty.pprint(mesh)
31
+ if point_data:
32
+ rich.pretty.pprint(mesh.point_data)
33
+ if cell_data:
34
+ rich.pretty.pprint(mesh.cell_data)
35
+ if field_data:
36
+ rich.pretty.pprint(mesh.field_data)
37
+ if field_data_values:
38
+ for name, data in mesh.field_data.items():
39
+ rich.print(f"{name}: ", end="")
40
+ rich.pretty.pprint(data)
41
+ if user_dict:
42
+ rich.print("User Dict: ", end="")
43
+ rich.pretty.pprint(mesh.user_dict)
@@ -49,7 +49,7 @@ class ReaderDispatcher[T]:
49
49
  for reader in self.readers:
50
50
  if reader.match_path(path):
51
51
  data: T = reader.load(path, **kwargs)
52
- logger.debug('Loaded {} from "{}".', type(data), path)
52
+ logger.opt(depth=2).debug('Loaded {} from "{}".', type(data), path)
53
53
  return data
54
54
  raise UnsupportedReaderError(self.dtype, path)
55
55
 
@@ -54,6 +54,6 @@ class WriterDispatcher:
54
54
  if writer.match_data(data) and writer.match_path(path):
55
55
  Path(path).parent.mkdir(parents=True, exist_ok=True)
56
56
  writer.save(path, data, **kwargs)
57
- logger.debug('Saved {} to "{}".', type(data), path)
57
+ logger.opt(depth=2).debug('Saved {} to "{}".', type(data), path)
58
58
  return
59
59
  raise UnsupportedWriterError(data, path)
@@ -111,7 +111,7 @@ class SeriesWriter(Sequence[File], contextlib.AbstractContextManager):
111
111
  self.save()
112
112
 
113
113
  def save(self) -> None:
114
- grapes.save_json(self.file, self.series.model_dump(by_alias=True))
114
+ grapes.save(self.file, self.series.model_dump(by_alias=True))
115
115
 
116
116
  def start(self) -> None:
117
117
  pass
@@ -4,7 +4,9 @@ from liblaf.melon.io.abc import ConverterDispatcher
4
4
 
5
5
  from ._array import ArrayToPointSet
6
6
  from ._poly_data import PolyDataToPointSet
7
+ from ._trimesh import TrimeshToPointSet
7
8
 
8
9
  as_point_set = ConverterDispatcher(pv.PointSet)
9
10
  as_point_set.register(ArrayToPointSet())
10
11
  as_point_set.register(PolyDataToPointSet())
12
+ as_point_set.register(TrimeshToPointSet())
@@ -13,5 +13,9 @@ class PolyDataToPointSet(AbstractConverter):
13
13
 
14
14
  @override
15
15
  def convert(self, data: pv.PolyData, /, **kwargs) -> pv.PointSet:
16
+ point_normals: bool = kwargs.pop("point_normals", False)
16
17
  data.active_scalars_name = None
17
- return data.cast_to_pointset(**kwargs)
18
+ result: pv.PointSet = data.cast_to_pointset(**kwargs)
19
+ if point_normals:
20
+ result.point_data["Normals"] = data.point_normals
21
+ return result
@@ -0,0 +1,21 @@
1
+ from typing import Any, override
2
+
3
+ import pyvista as pv
4
+ import trimesh as tm
5
+
6
+ from liblaf.melon import utils
7
+ from liblaf.melon.io.abc import AbstractConverter
8
+
9
+
10
+ class TrimeshToPointSet(AbstractConverter):
11
+ @override
12
+ def match_from(self, data: Any, /) -> bool:
13
+ return utils.is_trimesh(data)
14
+
15
+ @override
16
+ def convert(self, data: tm.Trimesh, /, **kwargs) -> pv.PointSet:
17
+ point_normals: bool = kwargs.pop("point_normals", False)
18
+ result: pv.PointSet = pv.PointSet(data.vertices)
19
+ if point_normals:
20
+ result.point_data["Normals"] = data.vertex_normals
21
+ return result
@@ -9,7 +9,7 @@ from liblaf.melon.typed import PathLike
9
9
 
10
10
  class ObjReader(AbstractReader):
11
11
  extensions: Container[str] = {".obj"}
12
- precedence: int = 1
12
+ precedence: int = 1 # prefer over pyvista.read
13
13
 
14
14
  @override
15
15
  def load(self, path: PathLike, /, **kwargs) -> pv.PolyData:
@@ -11,5 +11,5 @@ from ._utils import get_landmarks_path
11
11
 
12
12
  def load_landmarks(path: str | os.PathLike[str]) -> Float[np.ndarray, "N 3"]:
13
13
  path: Path = get_landmarks_path(path)
14
- data: list[dict[str, float]] = grapes.load_json(path)
14
+ data: list[dict[str, float]] = grapes.load(path)
15
15
  return np.asarray([[p["x"], p["y"], p["z"]] for p in data])
@@ -16,4 +16,4 @@ def save_landmarks(
16
16
  path: Path = get_landmarks_path(path)
17
17
  points: Float[np.ndarray, "N 3"] = np.asarray(points)
18
18
  data: list[dict[str, float]] = [{"x": p[0], "y": p[1], "z": p[2]} for p in points]
19
- grapes.save_json(path, data)
19
+ grapes.save(path, data)
@@ -11,5 +11,5 @@ from ._utils import get_polygons_path
11
11
 
12
12
  def load_polygons(path: PathLike) -> Integer[np.ndarray, " N"]:
13
13
  path: Path = get_polygons_path(path)
14
- data: list[int] = grapes.load_json(path)
14
+ data: list[int] = grapes.load(path)
15
15
  return np.asarray(data)
@@ -15,4 +15,4 @@ def save_polygons(
15
15
  ) -> None:
16
16
  path: Path = get_polygons_path(path)
17
17
  polygons = np.asarray(polygons)
18
- grapes.save_json(path, polygons.tolist())
18
+ grapes.save(path, polygons.tolist())
@@ -4,6 +4,7 @@ from typing import Any
4
4
  import pyvista as pv
5
5
 
6
6
  from liblaf import grapes
7
+ from liblaf.melon import io, triangle
7
8
 
8
9
 
9
10
  def mesh_fix(
@@ -15,19 +16,21 @@ def mesh_fix(
15
16
  remove_smallest_components: bool = False,
16
17
  ) -> pv.PolyData:
17
18
  if grapes.has_module("pymeshfix"):
18
- mesh: pv.PolyData = _pymeshfix(
19
+ result: pv.PolyData = _pymeshfix(
19
20
  mesh,
20
21
  verbose=verbose,
21
22
  joincomp=joincomp,
22
23
  remove_smallest_components=remove_smallest_components,
23
24
  )
24
25
  elif shutil.which("MeshFix"):
25
- mesh: pv.PolyData = _mesh_fix_exe(mesh, verbose=verbose)
26
+ result: pv.PolyData = _mesh_fix_exe(mesh, verbose=verbose)
26
27
  else:
27
28
  raise NotImplementedError
28
29
  if check:
29
- raise NotImplementedError
30
- return mesh
30
+ assert triangle.is_volume(result)
31
+ mesh: pv.PolyData = io.as_poly_data(mesh)
32
+ result.field_data.update(mesh.field_data)
33
+ return result
31
34
 
32
35
 
33
36
  def _pymeshfix(
@@ -39,7 +42,7 @@ def _pymeshfix(
39
42
  ) -> pv.PolyData:
40
43
  with grapes.optional_imports():
41
44
  import pymeshfix
42
-
45
+ mesh: pv.PolyData = io.as_poly_data(mesh)
43
46
  fix = pymeshfix.MeshFix(mesh)
44
47
  fix.repair(
45
48
  verbose=verbose,
@@ -0,0 +1,21 @@
1
+ from ._abc import NearestAlgorithm, NearestAlgorithmPrepared, NearestResult
2
+ from ._nearest import nearest
3
+ from ._nearest_point import NearestPoint, NearestPointPrepared, NearestPointResult
4
+ from ._nearest_point_on_surface import (
5
+ NearestPointOnSurface,
6
+ NearestPointOnSurfacePrepared,
7
+ NearestPointOnSurfaceResult,
8
+ )
9
+
10
+ __all__ = [
11
+ "NearestAlgorithm",
12
+ "NearestAlgorithmPrepared",
13
+ "NearestPoint",
14
+ "NearestPointOnSurface",
15
+ "NearestPointOnSurfacePrepared",
16
+ "NearestPointOnSurfaceResult",
17
+ "NearestPointPrepared",
18
+ "NearestPointResult",
19
+ "NearestResult",
20
+ "nearest",
21
+ ]