Python SolidWorks 二次开发---Python如何连接SolidWorks

本文介绍了使用Python3.8和SolidWorks2018进行二次开发的步骤,包括环境搭建(Anaconda创建环境,安装pywin32),编辑器选择(推荐VSCode),通过win32com.client连接SolidWorks,以及使用makepy.py生成SolidWorksAPI的Python文档,以方便查询属性和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python SolidWorks 二次开发—Python如何连接SolidWorks



前言

用Python来进行SolidWorks的二次开发其实是有点非主流的,因为Python本身的特性导致程序运行的效率会比VBA等SolidWorks原生支持的二次开发软件运行效率降低50%以上,用Python仅仅是因为语法简单,实现起来快捷,且所开发的功能仅供个人提高效率使用。这里记录一些开发过程,如有同样需求的可参考使用。


一、Python和SolidWorks的版本

Python使用的版本是3.8
SolidWorks使用的版本是2018
系统环境为WIN10

二、Python所需的环境

1.Anaconda

Python环境建议用Anaconda管理,这样比较方便管理各种环境和包
Anaconda官网地址,安装方法自行搜索

1.1Anaconda环境创建

第一步:打开Anaconda Powershell Prompt,并输入以下命令,其中XXXX为环境名称

conda create -n XXXX python=3.8

第二步:出现以下提示时输入确认,并等待环境创建完成

Proceed([y]/n)?

第三步:输入以下命令,激活刚才创建的环境

conda activate XXXX

第四步:在刚才激活的环境下,安装所需的包pywin32,输入以下命令

pip install pywin32

至此,Python所需的环境已经搭建完成

2.编辑器的选择

编辑器建议选择VS Code,配置简单,安装方便,体积小巧
VS Code官网地址,安装方法自行搜索

VS Code安装完成后安装以下2个插件

Python
Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code

以上工作完成后即可开始Python连接SolidWorks

三、连接SolidWorks

以下代码将使用Python连接SolidWorks,连接成功后回弹出"Hello SolidWorks"对话框,详细代码如下

import win32com.client

def connectsld():
    # SolidWorks年份版本
    sldver=2018
    # 建立com连接,如只有一个版本,可以只写"SldWorks.Application"
    swApp=win32com.client.Dispatch(f'SldWorks.Application.{sldver-1992}')
    # 提升API交互效率
    swApp.CommandInProgress =True
    # 显示SolidWorks界面
    swApp.Visible =True
    # 弹出SolidWorks自带对话框
    swApp.SendMsgToUser("Hello SolidWorks")

if __name__ == '__main__':
    connectsld()

执行完成后显示如下对话框
在这里插入图片描述

四、makepy.py生成相关API的Python文档

1. makepy.py文件的位置

在 Anaconda 的XXXX环境下的 …\envs\XXXX\Lib\site-packages\win32com\client 文件夹内找到 makepy.py

2. 运行makepy.py文件生成的文件

在VS Code中直接运行makepy.py,会弹出下图对话框
选择下图中两个选项会生成两个.py后缀的文件,文件路径在VS Code终端中可以看到
在这里插入图片描述

3. 生成文件的作用

SldWorks 2018 Type Library(1a.0)生成的是SolidWorks COM API 的调用方法,主要用来查询相关属性和方法
SOLIDWORKS 2018 Constant type library(1a.0)生成的是SolidWorks COM API 的常量参数,主要用来查询常量的设定值

不生成以上2个文件依然可以直接用Python连接SolidWorks,以上两个文件可以方便查询相关属性和方法及常量的设定

基于PythonSolidWorks进行二次开发,并通过参数化的方式修改长方体的尺寸并使其更新模型的操作相对复杂一些。由于SolidWorks本身是以Windows平台下的C++为基础构建的应用程序,默认提供的API是COM API,直接利用Python操作时需要借助额外库如`pywin32`来访问SW的API。 下面是一个简单的示例代码框架: ```python import win32com.client def update_box_dimensions(swApp, part, new_length, new_width, new_height): """ 修改已存在的长方体特征尺寸 :param swApp: SolidWorks应用程序实例 :param part: 当前零件文档对象 :param float new_length: 新长度值 (单位:mm) :param float new_width: 新宽度值 (单位:mm) :param float new_height: 新高度值 (单位:mm) """ # 获取FeatureManager指针 feature_manager = part.FeatureManager try: # 搜索名为"Extrude_Boss_1"(默认创建的第一个拉伸实体) 的特征作为我们调整的目标, # 如果您的实际名称不是这个,请替换为您自己的特征名。 target_feature_name = "Extrude_Boss_1" for i in range(1, part.GetFeaturesCount() + 1): # 遍历所有特性寻找目标特征 feat = part.GetFeature(i - 1) if feat.Name == target_feature_name: dim_driver = None # 找到对应的驱动维度(假设您所关注的是第一个草图中的矩形轮廓) sketch_segment_index = 0 # 根据实际情况设置索引值 dimension_names = ["D1@Sketch{}".format(sketch_segment_index), "D2@Sketch{}".format(sketch_segment_index), "Distance@" + target_feature_name] dimensions_values_dict = { dimension_names[0]: str(new_width / 1000.), # 转换为米制输入给solidworks dimension_names[1]: str(new_length / 1000.), dimension_names[2]: str(-new_height / 1000.)} # SW中Z轴向下为正向建模 success = True for key,value in dimensions_values_dict.items(): result = part.Parameter(key).SetFormula(value,False,"") if not result: print(f"{key}: 设置失败.") success &= False return bool(success and part.EditRebuild3()) raise Exception("未找到指定的特征 '{}'".format(target_feature_name)) except Exception as e: print(e) if __name__ == '__main__': # 启动SolidWorks应用或者连接至现有的SolidWorks会话. sw_app = win32com.client.Dispatch('SldWorks.Application') # 确保只有一个活动窗口打开着包含我们的零件文件 doc_specified = [doc.Title.endswith(".sldprt") \ and ("Part1.sldprt" in doc.GetTitle())\ for doc in sw_app.Documents] active_part_doc = next((doc for doc,is_target in zip(sw_app.Documents, doc_specified)\ if is_target),None) if active_part_doc != None : updated_successfully = update_box_dimensions( sw_app=sw_app, part=active_part_doc, new_length=float(input("请输入新的长度(mm):\n")), new_width=float(input("请输入新的宽度(mm):\n")), new_height=float(input("请输入新的高度(mm):\n")) ) message_text = "更新成功!" if updated_successfully else "更新失败." sw_app.SendMsgToUser(message_text) ``` 此段脚本展示了如何定位特定的几何特征并更改其尺寸定义公式,然后尝试强制重建整个组件以反映最新的设计意图。需要注意几个要点: - 这个例子假定你要编辑的对象是由最开始的一个简单草绘图形经过一次拉伸命令形成的长方体; - 特征以及它们相关的尺寸标注名字可能会因个人习惯而异,在正式部署之前应该确认好确切的名字; - Python环境中应当已经安装了`pip install pywin32`用于支持自动化控件交互功能; 以上信息仅供参考,具体细节可能根据不同版本有所差异。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值