使用MeshFix修复三角形网格
项目描述
Python/Cython包装了Marco Attene的优秀、获奖软件MeshFix。此模块结合了C++的速度、Python的便携性和易于安装的特点。
该软件将多边形网格作为输入,并生成一个副本,其中所有特定集合的“缺陷”都已被纠正。MeshFix旨在纠正原始数字网格模型中存在的典型缺陷,因此如果将其应用于其他类型的输入网格(例如,镶嵌的CAD模型),可能会失败或产生粗糙的结果。
假设输入表示单个封闭实体对象,因此输出将是一个单一生成的多面体封闭三角形网格。从输入中移除了所有奇点、自相交和退化元素,而表面上的无缺陷区域则保持不变。
C++源代码最后更新时间:2020年7月1日
安装
从PyPI安装
pip install pymeshfix
从GitHub的源代码安装
git clone https://github.com/pyvista/pymeshfix
cd pymeshfix
pip install .
依赖关系
需要numpy和pyvista
如果您无法或不想安装vtk,您可以使用以下方法在不安装pyvista的情况下安装它
pip install pymeshfix --no-dependencies
您将错过一些来自 pyvista 的酷功能,但它仍然可以正常工作。
示例
使用以下Python代码测试安装
from pymeshfix import examples
# Test of pymeshfix without VTK module
examples.native()
# Performs same mesh repair while leveraging VTK's plotting/mesh loading
examples.with_vtk()
简单示例
此示例直接使用Cython包装器。这里没有铃铛或哨子
import pymeshfix
# Read mesh from infile and output cleaned mesh to outfile
pymeshfix.clean_from_file(infile, outfile)
此示例假设用户在Python中有顶点和面数组。
import pymeshfix
# Generate vertex and face arrays of cleaned mesh
# where v and f are numpy arrays
vclean, fclean = pymeshfix.clean_from_arrays(v, f)
包含和不包含VTK的完整示例
将MeshFix引入Python的主要原因是允许库与其他Python程序通信,而无需使用硬盘。因此,此示例假设您内存中有网格,并希望使用MeshFix修复它。
import pymeshfix
# Create object from vertex and face arrays
meshfix = pymeshfix.MeshFix(v, f)
# Plot input
meshfix.plot()
# Repair input mesh
meshfix.repair()
# Access the repaired mesh with vtk
mesh = meshfix.mesh
# Or, access the resulting arrays directly from the object
meshfix.v # numpy np.float64 array
meshfix.f # numpy np.int32 array
# View the repaired mesh (requires vtkInterface)
meshfix.plot()
# Save the mesh
meshfix.write('out.ply')
或者,如果VTK不可用或用户希望对清理算法有更多控制,可以直接使用MeshFix的Cython包装器。
import pymeshfix
# Create TMesh object
tin = pymeshfix.PyTMesh()
tin.LoadFile(infile)
# tin.load_array(v, f) # or read arrays from memory
# Attempt to join nearby components
# tin.join_closest_components()
# Fill holes
tin.fill_small_boundaries()
print('There are {:d} boundaries'.format(tin.boundaries()))
# Clean (removes self intersections)
tin.clean(max_iters=10, inner_loops=3)
# Check mesh for holes again
print('There are {:d} boundaries'.format(tin.boundaries()))
# Clean again if necessary...
# Output mesh
tin.save_file(outfile)
# or return numpy arrays
vclean, fclean = tin.return_arrays()
算法和引用政策
为了更好地理解算法的工作原理,请参阅以下论文
M. Attene. 一种修复数字化多边形网格的轻量级方法。视觉计算机,2010。(c)斯普林格。DOI:10.1007/s00371-010-0416-3
本软件基于其中发表的想法。如果您将MeshFix用于研究目的,应在您的发表成果中引用上述论文。在没有适当的许可合同的情况下,MeshFix不能用于商业目的。
版权
MeshFix版权(C)2010:IMATI-GE / CNR
版权所有。
本程序双许可如下
(1) 您可以将MeshFix用作免费软件;您可以在自由软件基金会发布的GNU通用公共许可证的条款下重新分发它和/或修改它;许可证的第3版,或(根据您的选择)任何较新版本。
在这种情况下,本程序的分发是希望它将是有用的,但没有任何保证;甚至没有关于适销性或特定目的适用性的暗示保证。有关详细信息,请参阅GNU通用公共许可证(https://gnu.ac.cn/licenses/gpl.txt)。
(2) 您可以将MeshFix用作商业软件的一部分。在这种情况下,必须与作者和IMATI-GE/CNR就适当的许可合同达成协议。
项目详情
pymeshfix-0.17.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ce809a1741aaf670a3df98cf6aaba15881223bd7230928effc021395455397c9 |
|
MD5 | b14de61faf92ba19cd3627517457795a |
|
BLAKE2b-256 | f51385fd4145af2e1e9c03194512309e0a631afc826396b11860c831171a37e0 |
pymeshfix-0.17.0-cp312-cp312-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 575bde851ab93642176a55f31c1e8c9611fc2ed43601cac4f3a028b8530f7075 |
|
MD5 | f36c2b30c6c62f0a4f831cccce48b6f5 |
|
BLAKE2b-256 | 0440999e52f51b96ad580786e193073f1b96cf0e92bc06a444eb529022a7989c |
pymeshfix-0.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0a5215bda194e53c7b909a11313f2a2b6086c87e3e3f9ad26bfe016e9da45dab |
|
MD5 | e1852022eb5685f0fabbb77038444a89 |
|
BLAKE2b-256 | a032023c0869f7056ce9f578308322722f25a2dc57a38430283bfc2b101a4bcb |
pymeshfix-0.17.0-cp312-cp312-macosx_11_0_arm64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5bfc96dadd774591394451ad2855d3d5b2771e7dfd85a0ca9cbd47a968f8ed1f |
|
MD5 | 8602df11b5626708ce5e83344503596a |
|
BLAKE2b-256 | aae898ad3f3310aa94ce334211054a4e9fe8e21877b39bca0db5942adfdbdd0a |
pymeshfix-0.17.0-cp312-cp312-macosx_10_9_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a7218bc3bb7bc87a7d7335ad0b0dcd376ce6f993980d4bd244365175d73ea8ea |
|
MD5 | fdb0113132554ce263db1c3ebc298a04 |
|
BLAKE2b-256 | f098c7d6b965e776030063e5ee051ba55ed2fefa8222a2e4f89107913c08f589 |
pymeshfix-0.17.0-cp311-cp311-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8bfa35b1105b3af6fee3e75e64da08bb82d9a92021277c02d3678639eeefe6ee |
|
MD5 | 3d441e554d6fd2943c3ac5e9a357631a |
|
BLAKE2b-256 | 0a767c3bd6eb9fa1e8f0580ae18bcc0e5279fd58440a76d6a879cd22630957ae |
pymeshfix-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e15ebfd8396f9504674391b81b0ec06f55640c04f212cb3a940463165e06910b |
|
MD5 | bccc0e76cceffc4409480757a100c2b3 |
|
BLAKE2b-256 | 3822a7548529770112a4b3980e2c06ec5c4618da537b6d236c01d0cc0f07c5c5 |
pymeshfix-0.17.0-cp311-cp311-macosx_11_0_arm64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fef1de0b0d250221b41b9f2df5cc381558ffae105c7de7a3a0c66559c43088e0 |
|
MD5 | 4aece3fb4ceb148b75f1582f85a5169a |
|
BLAKE2b-256 | 56b08095d7e08a77c4d4e2b8eaf847bf539004ff8736ef0ed013ec20dc055b2e |
哈希值 用于 pymeshfix-0.17.0-cp311-cp311-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dabe6b589dd71cf7314856ac6e7a861756c7d3b8dbc9d07cae3f74722e6ff00a |
|
MD5 | a24dab5a7667b918609a5aa951d98f67 |
|
BLAKE2b-256 | 1aeadaa383e947c7cbe69a76884b8c2ede4dc9910a7f3047dc70680c8df609f7 |
哈希值 用于 pymeshfix-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e66b870ba9143f1edd71ec945c4de7b0d4e8f54d184260d8fbf71b1eaa3a1065 |
|
MD5 | 392280ae9a2b3c73a33938d9b7007b8f |
|
BLAKE2b-256 | 7be95932527c8d42bd9b7f6fa8ee2fa533cb6c8581caded5f01118191efea670 |
哈希值 用于 pymeshfix-0.17.0-cp310-cp310-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0abd1e40836b8199fcdf2ced61e6f3cb4ce2e56406832238827d330dc9e580d4 |
|
MD5 | 2f4c7198bd143ff80190d83d3e736ebe |
|
BLAKE2b-256 | c6b0ffdef66d6873ac9dae2ec869d02cdafb03a3e447e68ac2274d096e35eba8 |
哈希值 用于 pymeshfix-0.17.0-cp310-cp310-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 135d84ce6a1e98028fef672a199bf4d5eb38aa54959ab032de6bc107ff447207 |
|
MD5 | a2696a3f28bf63b458e78916b9a2b28a |
|
BLAKE2b-256 | 340bfe2df9514cb0b3f55729525c119c64bf8766b31e7f997c08d410ee962b9e |
哈希值 用于 pymeshfix-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ab82020dfa9dfeb1894e3ed416bb7ea493bf0d78ba28f31d9d0ccf0c27e2384e |
|
MD5 | 7254a9330fcf084136caabc4ab00b178 |
|
BLAKE2b-256 | 7ffc1560f2b1d674c7b2a3847fd64ae27dd4768c1cda0ddb5ac5012778aa337c |
哈希值 用于 pymeshfix-0.17.0-cp39-cp39-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d6549f5c856709888ed3c445b785c6ecb0372b0f649b879c222a62622ab3172b |
|
MD5 | db844164155ba2330b683635071f34ab |
|
BLAKE2b-256 | 10f0dccdf11c3cec6e73fef444ecd9d7504ccd098944d3be2113b9da7a1ab993 |
哈希值 用于 pymeshfix-0.17.0-cp39-cp39-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 370db90b316d304dac11974167e7da111f232b8bb7aae2a85affe723584bb7c1 |
|
MD5 | e05382984ba1bdb4fc15c3ffd977c10d |
|
BLAKE2b-256 | 66dc4240cbc68f19e42f8fdd7a07d78327108f0cbb029ed6a020765cfbc74b95 |