我试图得到一个代码,这将有助于我脚本生成定制的stl文件结束。
我的一般需求是:
- 使用Python,如果可能,不使用其他后端软件
- 最小化依赖关系
- 生产轻量化模型
并具体要求:
- 为规则形状生成3D网格
- 基于不同字体从文本生成3D网格
- 将文本网格环绕圆柱体
- 执行布尔操作
到目前为止,我还没有找到合适的库来执行这些操作。
我发现了sdf库,它真的很棒,但可以生成大型模型。
Trimesh很棒。我设法生成结构的网格,导出为HTML和STL,但没有后端无法执行布尔运算。
我看了一下Pymesh,但是库似乎不再开发了,并且有大量的依赖项。
我现在尝试快速查看PyVista,但目前无法进入非流形模型的问题。
这是我想要的代码歧管
import numpy as np
import pyvista as pv
RES = 20
vertices = np.array([
[20.5, -17.5, 0.0],
[24.39711432, -8.75, 0.0],
[24.39711432, 8.75, 0.0],
[20.5, 17.5, 0.0],
[19.20096189, 8.75, 0.0],
[19.20096189, -8.75, 0.0],
[20.5, -17.5, 0.0]])
profile = pv.MultipleLines(vertices)
profile.plot(color='tan')
extruded = profile.extrude_rotate(resolution=RES**2, rotation_axis=(0, 1, 0))#, capping=False)
print(extruded.is_all_triangles)
print(extruded.is_manifold)
print(extruded.extract_geometry().n_open_edges)
extruded.plot_normals()
# Check if all triangles :
extruded = extruded.fill_holes(4*RES)
print(extruded.is_all_triangles)
print(extruded.is_manifold)
print(extruded.extract_geometry().n_open_edges)
extruded.plot_normals()
extruded.plot(color='tan')
第二步是在它周围添加文本。
2条答案
按热度按时间7y4bm7vi1#
我不完全理解你想结束(特别是关于文本部分),但你的圆柱体几乎是流形,可以使流形。
有几个问题:
1.您的
fill_holes
调用为柱面添加了一个“bottom”。这将弄乱流形,因为这个“底部”的边缘分别属于三个面(一个内壁,一个外壁和一个“底部”面)。我建议忘记底部,只要你需要一个多方面的网格,只有添加底部在最后,如果你需要它。1.您的
MultipleLines
调用创建了7个点,因此多边形横截面实际上并不是闭合的。您可以使用不同的方法创建该示例,或者只在profile
上调用.clean()
来关闭它。1.您还需要从挤出中删除封口,因为这可能会导致圆柱体内部有两个内部面,从而再次扰乱歧管。
1.如果你修复了上面的问题,你最终会得到一个仍然有12条开放边的挤出圆柱体:二乘六。这表明VTK无法将旋转挤出的两端识别为相同的,调用
.clean()
也没有帮助。事实证明,我们必须提高默认值tolerance
来解决这个问题。tolerance=1e-10
的选择对于您的示例很好,但是如果模型的参数可以变化,为了安全起见,您可以选择更高的值。下面是固定的片段:
话虽如此,使用VTK进行布尔运算可能是非常困难的。您可能会发现最终结果仍然不适合您的用例。但你只有试过才知道。
dzhpxtsq2#
看起来pymadcad应该适合您的需求(disclamer:我是pymadcad的作者)
针对您的应用特性:
将网格缠绕在圆柱体上更具体,但我想可以自己编码,因为文本只是平面的。下面是我将如何进行:
结果如下: