将STEP转换为STL的编码库,无需大输出文件大小

问题描述 投票:0回答:3

我正在构建一项服务,将 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++ 的库将具有最佳的处理速度。

python file cad freecad cadquery
3个回答
1
投票

查看 DG 内核:https://dynoinsight.com/ProDown.htmhttp://dynoinsight.com/Prod/Examples/InterfaceTestsVC.zip 中的 ModelTest::SetGeometryTypeEx() 演示了由偏差定义的不同密度网格的生成。这是C++。

问候


1
投票

这是因为您的 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 参考


0
投票

我正在研究类似的用例。我知道,这不是问题的直接答案,只是指出一个可能的解决方案:.gltf 和 .glb 格式通常在网络中使用,因为它们的文件大小较小。请参阅https://github.com/tpaviot/pythonocc-demos/blob/master/examples/core_export_gltf_single_shape.py

© www.soinside.com 2019 - 2024. All rights reserved.