【问题标题】:Python module for parametric CAD用于参数化 CAD 的 Python 模块
【发布时间】:2013-01-09 06:06:39
【问题描述】:

我正在寻找适用于 python 的 CAD 模块。这是我发现的,如果我错了,请纠正我:

  • PythonCAD:
    • 文件类型:DWG、DXF、SVG
    • 面向:在窗口中单击
    • 最后维护:2012-06-15
    • 记录:贫穷和肮脏
  • PythonOCC:
    • 文件类型:STEP、IGES、STL(导入/导出)
    • 面向:脚本
    • 上次维护时间:2013-01-12
    • 记录:良好且清晰
    • 安装太痛苦了
  • FreeCAD (python wrapping)
    • 文件类型:?
    • 面向:单击窗口和可从 python 导入的 python 脚本
    • 最后维护时间:2013 年 1 月
    • 记录在案:非常好

好吧,似乎 FreeCAD 的 python 绑定是最好的,但还有其他东西吗?

【问题讨论】:

  • 这个问题有点问题,因为很难知道范围。您可能可以通过谷歌搜索“Python 参数化 CAD”找到最佳和最新的答案。可用于此类事情的软件经常更改,因此任何答案很快就会过时。如果您对找到的 CAD 模块有具体问题,可以单独提出这些问题。此外,您可以通过在一些邮件列表中询问您已经列出的项目之一来获得更好的答案。
  • 我猜过去 7 年情况发生了变化。从我使用 PythonOCC 的最后 3 个小时开始:安装非常简单(基本上是 cmake; make; make install),OCC 本身的文档确实很棒,但是当您遇到某些问题时,SWIG 绑定的可用性从“足够好”到“纯粹的痛苦和恐怖”不等C++ 构造。

标签: python cad


【解决方案1】:

我发现 FreeCAD 是最好的解决方案。 Python 绑定让您可以全面地设计部件。

myShape = Part.makeBox(2,2,2)
myShape.translate(Base.Vector(2,0,0))

您可以从简单的几何图形中使用布尔运算:

cylinder1 = Part.makeCylinder(3,10,Base.Vector(0,0,0),Base.Vector(1,0,0))
cylinder2 = Part.makeCylinder(3,10,Base.Vector(5,0,-5),Base.Vector(0,0,1))
common = cylinder1.common(cylinder2)

唯一的缺点是用mac os安装,我无法在雪豹上编译它(因为对非持续库的依赖太多)。

但是 pythonocc 也有同样的问题,我不喜欢的是最小的文档和过于开放级联的合成器,而不是太多的 pythonistic。

【讨论】:

    【解决方案2】:

    occmodel 是一个小型自包含库,它提供对 OpenCASCADE 建模内核的高级访问。

    【讨论】:

      【解决方案3】:

      CADquery 是目前用于 FreeCad 的插件,我使用它并且比在 Python 中编写 OpenScad 脚本效果更好。开发人员目前正在从 FreeCad 迁移到 Python OCC 版本 2,但我目前正在使用 V1。

      CQParts 是使 cadquery 有用的一个非常重要的部分。它是程序的类似物,因此您可以设计一个轮子等。

      【讨论】:

      • 截至 2021 年,这是我使用的。自 CadQuery 2.0 发布以来,已完成向 PythonOCC(然后是他们自己的 OpenCascade Python 绑定,OCP)的迁移,现在它是一款出色的(但鲜为人知的)软件,可用于实际的参数化 CAD 使用。跨度>
      【解决方案4】:

      PythonOCC 可能是最完整的功能。这里还有一些:

      CADDD - 使用 PythonOCC,在 Qt 中有 GUI。

      NURBS - 用于处理 NURBS 的 Python 模块。

      lolcad - 看起来很不错,但很长一段时间没有更新。

      当然,您可以尝试使用 Blender,它内置 Python 解释器,并且有用于架构和精确建模的插件(如 this

      【讨论】:

        【解决方案5】:

        查看Salome。代码如下所示:

        import sys
        import salome
        
        salome.salome_init()
        theStudy = salome.myStudy
        
        import salome_notebook
        notebook = salome_notebook.NoteBook(theStudy)
        sys.path.insert( 0, r'/tmp')
        
        ###
        ### GEOM component
        ###
        
        import GEOM
        from salome.geom import geomBuilder
        import math
        import SALOMEDS
        
        
        geompy = geomBuilder.New(theStudy)
        
        O = geompy.MakeVertex(0, 0, 0)
        OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
        OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
        OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
        Vertex_1 = geompy.MakeVertex(0, 0, 0)
        Vertex_2 = geompy.MakeVertex(0, 2, 0)
        Vertex_3 = geompy.MakeVertex(2, 2, 0)
        Line_1 = geompy.MakeLineTwoPnt(Vertex_2, Vertex_3)
        Line_1_vertex_2 = geompy.GetSubShape(Line_1, [2])
        Line_1_vertex_3 = geompy.GetSubShape(Line_1, [3])
        Curve_1 = geompy.MakeInterpol([Line_1_vertex_2, Line_1_vertex_3, Vertex_1], True, False)
        geompy.addToStudy( O, 'O' )
        geompy.addToStudy( OX, 'OX' )
        geompy.addToStudy( OY, 'OY' )
        geompy.addToStudy( OZ, 'OZ' )
        geompy.addToStudy( Vertex_1, 'Vertex_1' )
        geompy.addToStudy( Vertex_2, 'Vertex_2' )
        geompy.addToStudy( Vertex_3, 'Vertex_3' )
        geompy.addToStudy( Line_1, 'Line_1' )
        geompy.addToStudyInFather( Line_1, Line_1_vertex_2, 'Line_1:vertex_2' )
        geompy.addToStudyInFather( Line_1, Line_1_vertex_3, 'Line_1:vertex_3' )
        geompy.addToStudy( Curve_1, 'Curve_1' )
        

        【讨论】:

          猜你喜欢
          • 2017-11-22
          • 1970-01-01
          • 2013-03-19
          • 1970-01-01
          • 1970-01-01
          • 2012-03-14
          • 2017-06-21
          • 2023-04-03
          • 2014-10-22
          相关资源
          最近更新 更多