【问题标题】:pyOCCT vs PythonOCC for new project (2020)pyOCCT 与 PythonOCC 的新项目(2020 年)
【发布时间】:2020-10-28 04:34:21
【问题描述】:

我正在开始一个新项目,其中包含一些要从特定域数据生成的 3D CAD 对象。我可以使用 OpenCascade 使用 c++ 对其进行编码,但如果可能的话,我更喜欢使用 Python。有两个流行的 occ python 绑定:pyOCCTPythonOCC,这两个项目都是活动的,并且是最新的 occ 7.4,但是如果能从两者都知道的人那里得到建议,那就太好了。由于 pyOCCT 是一个较新的项目,我想它解决了 PythonOCC 没有解决的问题,但目前尚不清楚创建新绑定的动机是什么。我需要一些网页渲染支持,显然 PythonOCC 已经支持网页渲染了。

【问题讨论】:

    标签: opencascade pythonocc


    【解决方案1】:

    一点背景知识:我正在做一个项目并使用 pythonocc。这是一个很棒的项目,但当时卡在 OCE(OpenCASCADE 社区版)v6 上,而 OpenCASCADE(官方)已经发布了 v7+,性能有了很多改进。我试图将 pythonocc 包装器更新到 v7+,但是在 7+ 中,它们更多地使用了 c++ 模板,我无法掌握如何在 SWIG 中执行此操作。当我尝试使用 pybind11 执行此操作时,它似乎更自然(并且我能够让它工作)。所以,我开始使用 pybind11 来包装 OCCT 7+。

    从那时起,pythonocc 已经更新了它的包装进程并且现在以 OCCT 为目标,所以如果你只是在 Python 中寻找对 OCCT 的访问,那么你不会出错。 Pythonocc 拥有更大的用户群,因此您可能会找到更多可以与之合作的人。

    我已经尝试跟上SMESH 的步伐,最近启动了一个pySMESH 项目,用于CAE 应用程序(如果这与您的工作相关)。这仅与 pyOCCT 兼容。尽管如此,如果你真的愿意,通过一些额外的努力,你可能会为 SMESH 而不是 pybind11 编写 SWIG 包装器,使其与 pythonocc 兼容。

    【讨论】:

      【解决方案2】:

      pyOCCT基于pybind11模板库,简单而强大。 PythonOCC 基于相当复杂的 SWIG。我都试过了,pyOCCT 看起来更有吸引力和透视,特别是如果你需要为某些目的添加自己的包装器。但是,我根本不使用网络渲染。

      【讨论】:

        【解决方案3】:

        两者都不是。请改用CadQuery's OCP,因为OCP 是唯一 OCCT Python 包装器以在内部使用sane clang-based binding generator。因此,OCP 大致类似于PySide2,后者也在内部使用sane clang-based binding generator 来生成其Python 绑定。

        同时,pyOCCT 使用hand-rolled pybind11 binding generator that requires C[++] headers to be modified with pybind11-specific macros。由于pybind11利用 clang,pyOCCT 也没有。奇怪的是,实际上有一个downstream binding generator ambiguously named "Binder" 确实利用了pybind11 和clang。当然,pyOCCT 不使用 Binder。

        在其他条件相同的情况下,在高级语言绑定与低级语言框架之间进行选择时,您通常要寻找的是这些绑定是否使用 clang。首选基于 clang 的绑定,而不是尝试(通常会失败)使用手动词法分析器和解析器解析 C[++] 的临时绑定。 C[++] 是一个你永远不想用非标准工具链解析的词汇、句法和语义边缘情况的暗坑。

        信任叮当声。不相信一切叮当。就是这样。

        【讨论】:

        猜你喜欢
        • 2020-06-21
        • 2021-02-17
        • 2020-11-15
        • 1970-01-01
        • 2021-01-05
        • 1970-01-01
        • 2020-01-24
        • 1970-01-01
        • 2020-09-22
        相关资源
        最近更新 更多