我正在构建一项服务,将 STEP 文件转换为 STL 文件以供用户查看。这种转换只是为了让用户可以查看上传到服务器的文件。它不用于修改文件。
但是,经过测试的转换库无法高效地将STEP转换为STL。
我第一次尝试 FreeCAD,并发表了以下论坛帖子:https://forum.freecad.org/viewtopic.php?t=79333
如何安装 FreeCAD 进行脚本编写:https://forum.freecad.org/viewtopic.php?t=79327
对于 FreeCAD,代码如下:
Part.open(fileNameFrom) # STEP File on server
Mesh.export( FreeCAD.getDocument("Unnamed").findObjects(), fileNameOut) # STL file on server
但是,FreeCAD 的处理效率非常低,22 MB 的 STEP 文件在转换两分钟后就输出为 366 MB 的 STL 文件。即使较小的 500 KB 文件仍然会生成 18 MB 的文件输出,并且没有文档指定较低的分辨率以减小文件大小。
我尝试的下一个编码库是
cadquery
。服务器的语法和设置很简单,因为该库可以直接从 PIP 安装,与 FreeCAD 不同。
import cadquery as cq
afile = cq.importers.importStep(fileNameFrom)
cq.exporters.export(afile,fileNameOut)
Cad Query 最初表现良好,为相同的 500 KB STEP 测试文件生成 8 MB 输出 STL 文件。但是,22 MB STEP 文件已转换为 386 MB STL 文件。
STEP 文件不够复杂,无法产生这样的文件大小。这是 22 MB STEP 文件:
这是 500 KB STEP 文件:
我可以尝试哪些库可以轻松地将 STEP 转换为 STL,而无需使用大文件?该库最好是 Python 或 Node.js 版本。不过,Java 或 C++ 也是可以接受的;我们的团队可以使用此类服务器。我假设基于 C++ 的库将具有最佳的处理速度。
查看 DG 内核:https://dynoinsight.com/ProDown.htm。 http://dynoinsight.com/Prod/Examples/InterfaceTestsVC.zip 中的 ModelTest::SetGeometryTypeEx() 演示了由偏差定义的不同密度网格的生成。这是C++。
问候
这是因为您的 STEP 文件包含圆柱体、NURBS 等分析曲面。STL 文件需要通过曲面细分过程计算的网格(三角形),并且通常会产生较大的文件。
Freecad 使用 OCCT(Open Cascade),您似乎使用的是旧版本的 OCCT。您可以使用 pythonocc-core 绑定,目前通过 Conda 提供 OCCT 版本 7.7.0。
这是转换的示例。
from OCC.Extend.DataExchange import *
shape = read_step_file('circuit.step')
write_stl_file(shape, 'circuit.stl', mode='binary',
linear_deflection=0.1, angular_deflection=0.5)
在我的系统中,大小为29MB的
circuit.step
被转换为大小为29MB的STL文件。您可以使用偏转选项调整曲面细分过程。请参阅OCCT 参考。
我正在研究类似的用例。我知道,这不是问题的直接答案,只是指出一个可能的解决方案:.gltf 和 .glb 格式通常在网络中使用,因为它们的文件大小较小。请参阅https://github.com/tpaviot/pythonocc-demos/blob/master/examples/core_export_gltf_single_shape.py