我正在开始一个新项目,其中包含要从特定域数据生成的一些 3D CAD 对象。我可以使用 OpenCascade 使用 c++ 对其进行编码,但如果可能的话,我更喜欢使用 Python。有两个流行的 occ python 绑定:pyOCCT和PythonOCC,这两个项目都是活跃的,并且是最新的 occ 7.4,但是如果能从两者都知道的人那里得到建议,那就太好了。由于 pyOCCT 是一个较新的项目,我想它解决了 PythonOCC 无法解决的问题,但目前尚不清楚创建新绑定的动机是什么。我需要一些网络渲染支持,显然 PythonOCC 已经支持网络渲染。
3 回答
一点背景:我正在做一个项目并使用 pythonocc。这是一个很棒的项目,但当时卡在 OCE(OpenCASCADE 社区版)v6 上,而 OpenCASCADE(官方)已经发布了 v7+,性能有了很多改进。我尝试将 pythonocc 包装器更新到 v7+,但是在 7+ 中,它们更多地使用了 c++ 模板,我无法掌握如何在 SWIG 中执行此操作。当我尝试使用 pybind11 执行此操作时,它似乎更自然(而且我能够让它工作)。所以,我开始 pyOCCT 使用 pybind11 包装 OCCT 7+。
从那时起,pythonocc 更新了它的包装进程,现在以 OCCT 为目标,所以如果你只是在 Python 中寻找对 OCCT 的访问,你不会出错。Pythonocc 拥有更大的用户群,因此您可能会找到更多的人与之合作。
我试图跟上SMESH的步伐,最近启动了一个用于 CAE 应用程序的pySMESH项目,如果这与您的工作相关的话。这仅与 pyOCCT 兼容。尽管如此,如果你真的愿意,通过一些额外的努力,你可能会为 SMESH 而不是 pybind11 编写 SWIG 包装器,使其与 pythonocc 兼容。
pyOCCT 基于 pybind11 模板库,简单而强大。PythonOCC 基于相当复杂的 SWIG。我都试过了,pyOCCT 看起来更有吸引力和透视,特别是如果你需要为某些目的添加自己的包装器。但是,我根本不使用网络渲染。
两者都不。请改用CadQuery 的 OCP,因为 OCP 是唯一在内部使用理智的基于 clang 的绑定生成器的 OCCT Python 包装器。因此,OCP 大致类似于 PySide2,后者也在内部使用一个健全的基于 clang 的绑定生成器来生成其 Python 绑定。
同时,pyOCCT 使用手动绑定生成器,该生成器需要使用 -specific宏pybind11
来修改 C[++] 标头pybind11
。由于pybind11
不利用 clang,pyOCCT也不利用。奇怪的是,实际上有一个名为“Binder”的下游绑定生成器,它确实同时利用了pybind11
和 clang。当然,pyOCCT 不使用 Binder。
在其他条件相同的情况下,在高级语言绑定与低级语言框架之间进行选择时,您通常要寻找的是这些绑定是否使用 clang。首选基于 clang 的绑定,而不是尝试(通常会失败)使用手动词法分析器和解析器解析 C[++] 的临时绑定。C[++] 是你永远不想用非标准工具链解析的词汇、句法和语义边缘情况的暗坑。
相信铿锵。不相信一切不叮当。这就是方法。