Solidworks 是由法国公司 Dassault Systèmes 开发的流行的计算机辅助设计软件。在我从事的每一项机械设计工作中,我们都使用像 Solidworks 这样的 CAD 软件包来建模和验证我们的设计,然后再进行制造。与任何优秀的 CAD 软件包一样,它具有在设计过程的所有阶段建模、起草和模拟的工具,甚至拥有非常强大的 API 和宏功能,允许您编写/自动化这些过程的脚本。然而,我一直在努力使用 Solidworks API,因为它只正式支持 C++、C# 和 VB 语言。我是使用 Python 的忠实拥护者,尤其是在工作流自动化方面,所以我写这篇文章的目的是讨论一些使用 Python 与 Solidworks 交互的方法。

为什么在 Solidworks 中使用 Python?

Python 是一种流行的编程语言,因为它具有人类可读性、平易近人以及互联网上大量的支持和资源。过去我在很多项目中都使用过 Python,所以它通常是我的首选编程语言。每当我需要快速移动或重命名多个文件,或从大量文件名中提取信息时,快速的 Python 脚本就是最佳选择。

特别是对于 Solidworks,以下是我个人使用 Python 来帮助我工作的多种方式:

  • 重命名大量文件

  • 重新组织 Solidworks 项目文件夹

  • 从文件名列表构建 BOM

  • 在自定义属性中添加或更改信息

  • 为一长串零件创建基本图纸

Solidworks 确实具有帮助自动化您的工作流程的功能,例如记录和运行宏以及使用 Solidworks 任务计划程序,但除了将工程图导出为 PDF 等非常基本的应用程序之外,我倾向于不使用这些功能。

使用 Python 与 Solidworks 交互的方法

我将在下面讨论两种使用 Python 与 Solidworks 交互的方法

  1. 方程式和设计表交互

  2. Solidworks API 包装器

方程式与设计表交互

使用 Python 与 Solidworks 交互的一种间接方法是利用 Solidworks 方程和设计表功能。 Solidworks 允许您使用全局变量和方程来驱动模型尺寸。这些值通常在 Solidworks 应用程序中存储和编辑,但您可以选择将其链接到外部文件。

image.png

您可以在 Solidworks 中构建您的方程式和变量,然后简单地将它们导出到外部文件。我已经为具有 3 个变量和 2 个方程的基本立方体完成了此操作。

https://gist.github.com/mason-landry/98ce326c8539ba667ec1363146a31713

由于这是一个简单的 .txt 文件,位于我的 SW 项目文件夹中,因此使用 Python 操作部件的尺寸很简单,就像写入任何其他文件一样。

https://gist.github.com/mason-landry/12213889642091193693918f295b13f5

一个有用的应用是创建大量尺寸略有不同的相似零件。您创建初始零件及其方程式文件的副本,然后遍历每个副本并根据需要进行更新。在 Solidworks 中有效地使用方程式是提升设计的好方法,而 Python 可以帮助您更进一步!

Solidworks API with Python — 基础

Solidworks 提供了一个强大的 API,正式支持 C++、C# 和 VB。不幸的是,在撰写本文时,它们并未正式支持 Python 集成。但是,可以使用 Python 的pywin32包将 VB 命令传递给 Solidworks 应用程序。作为使用 Solidworks 宏的替代方法,我已经多次使用这种方法来编写和自动化我的 Solidworks 工作流程。基本前提概述如下:

  1. 打开Solidworks,进入Tools > Macro > Record

2.执行您想要自动化/脚本的操作

3.停止录制并保存宏

4.进入Tools > Macro > Edit并选择你保存的文件

当此文件打开时,您可以看到 Solidworks 用来执行您的操作的 VB 命令。有时它会让人觉得有点 hacky,但是 Python 化这些 VB 命令并将它们加工成 Python 脚本非常容易。

image.png

下面是一些使用pywin32将 API 命令传递给 Solidworks 的示例。

首先,安装必要的 Python 包:

pip install pywin32

现在我们可以看看一些基本功能。这些将让您启动和终止 Solidworks、连接到应用程序(所有附加功能所必需的)、打开 Solidworks 文件并重建/保存它们。

https://gist.github.com/mason-landry/580995d0d34f33f7c8e4d575fef3cc4f

这些基本命令应该让您开始与 Solidworks 进行交互以实现自己的目标。如果你很好奇,这里有一个来自我最近参与的项目的真实示例。

Solidworks API with Python — 示例

我最近有一个项目,需要我制作几十张相当简单的 3D 模型图纸。模型已经存在,但尚未创建图纸。我知道,对于大多数(如果不是全部)部件来说,具有少量尺寸的简单 3 视图绘图就足够了。我想编写一些脚本来让我的生活更轻松一些,并确定了以下计划。该脚本需要:

  • 打开每个 Solidworks 零件

  • 更新零件的自定义属性,包括我的姓名、日期等(绘图标题栏必需)

  • 使用已知模板创建图纸

  • 将标准视图拖到图纸上

  • 将图纸保存到特定位置

这些步骤中的大部分或全部可能使用内置的 Solidworks 宏工具来实现,但代价是陡峭的学习曲线。我决定使用 Python 来遍历我的所有文件并包装 API 命令来实现上述目的。

在前面讨论的所有基本功能的基础上,我编写了一些内容来列出和更新部件的自定义属性。我使用自定义属性来驱动图纸的标题栏,并且需要在每张图纸中添加我的姓名和日期。

https://gist.github.com/mason-landry/47ec489b85d055a1ed9dbc0f72f52a3e

同样,这些行中的大多数直接取自 Solidworks 内置的宏记录功能的输出。

最后,我需要一个函数来创建和保存带有标准视图的绘图。

https://gist.github.com/mason-landry/d97c129b1677843afe2dd2fd2bbc19af

这里的一个重要注意事项是第 25、29、33 和 37 行。API 命令SelectByID2需要输入Nothing类型的变量。这是与 VB 语言相关的东西,并不直接翻译成 Python。我不得不更改 API 命令以改用pythoncom.Nothing对象。

有了所有这些,很容易循环浏览我的零件列表并为它们创建图纸。我仍然必须打开每张图纸并移动视图,添加一些尺寸等,但这为我节省了一些繁琐的工作,并且我在此过程中学到了一些东西。

https://gist.github.com/mason-landry/e8456d1abc9cea2ba040a25176f6384d

结论

如果您正在阅读本文,您可能有一些非常具体的想法,您想使用 Solidworks 和 Python 来完成。您应该能够看到我如何使用 Solidworks 宏工具来构建一个迷你 Python 库,以开始使用 Python 与 Solidworks 进行交互。希望您可以应用此方法来促进您自己的设计过程!

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐