在这里放一只兔兔
路过的朋友可以摸摸她: (这TM是兔子?)
/> フ
| _ _|
/` ミ_꒳ノ
/ |
/ ヽ ノ
│ | | |
/ ̄| | | |
| ( ̄ヽ__ヽ_)__)
\二つ
创建一个Mesh
不管是下面哪种方法,都要注意在生成一个三角面片时,三个点的先后顺序
E.g. [p0, p1, p2] 还是 [p0, p2, p1]
这个顺序决定了这个面片的法向朝向,朝里/朝外,下面是numpt-stl中给出的法向计算方式:
|
|
PyMeshlab
|
|
如果是逐步创建的,比如管状结构,一层一层进行构建mesh然后拼接的,可以使用下面的进行合并
|
|
这里如果直接返回mesh不知道为啥返回不成功,所以就返回点、面的array,然后在上一级使用pymeshlab.Mesh(verts, faces)再重构出来
Numpy-STL
|
|
多个mesh进行拼接:
|
|
PyVista
需要注意,Pyvista和其他略微不同,Pyvista的face需要指定是几个点构成一个面,可能出现由4个点构成的一个面,而其他库大都以三角面片为准
|
|
Trimesh
合并 Mesh
这里的合并不是Merge,将两个mesh简单放到同一个文件里的意思,而是对两个mesh进行操作,合并相同的区域,一般用到的操作是bool union,相对的,还有intersection, xor等操作。但是这些操作的前提都是两个mesh师close的,也就是水密的(watertight)
Close or not Close
Close or not Close, it’s a question
Close = Watertight
numpy-stl中给出判断closed的条件,即所有面的法向量之和为0:
|
|
所以在创建mesh的过程中要十分注意三角面片中三个点的顺序
pymeshlab
目前使用下来效果最好,但是速度特别慢…
|
|
pyvista
https://docs.pyvista.org/examples/index.html
https://docs.pyvista.org/examples/01-filter/boolean-operations.html
|
|
但是不知道为啥,这个库demo可以跑,但是用在我项目里就会段错误segment fault,不过例子还是很好看的
Trimesh
Trimesh 提供了一个自动合并所有Meshs的操作还是很不错的,而且速度上感觉会快很多…
|
|
Mesh 连通性
PyVista
https://docs.pyvista.org/api/core/_autosummary/pyvista.PolyData.connectivity.html
|
|
对Mesh进行插值
Mesh 填充孔洞
Mesh IO
pymeshlab
|
|
PyVista
|
|
Numpy-STL
|
|
Trimesh
|
|