AI4CAD:利用 Python 实现 SolidWorks 自动化建模小尝试(基于Python的Solidworks二次开发)
近年来,AI 已经逐渐渗透到我们工作的方方面面。你是否曾想过,如果建模也能交给 AI 来完成,我们只需告诉它:“帮我画一个杯子,高 12 厘米,直径 8 厘米,壁厚 2 毫米”,它就能自动完成?这听起来可能像是未来科幻,但如今借助 SolidWorks 的开放接口和 Python 的强大生态,我们正一步步迈向这个目标。
🧠 AI 建模设想:告诉它“我要一个杯子”
想象一个未来的建模流程:
你说:“我要一个杯子”
AI 追问:“多高?多大直径?底厚多少?是否带把手?”
你回答参数
AI 自动在 SolidWorks 中建模并保存。
当然以上还只是个美好的幻想,想要实现还需要发展自动化建模技术以及大语言模型交互。
这里我基于pycharm+anaconda实现了与SolidWorks 的关联,实现了以下小操作:
1、建立 Python 与 SolidWorks 的连接
2、通过代码新建零件文档
3、在前视基准面绘制一个正八边形
4、对该草图进行拉伸
5、保存生成的零件文件
当然了,重点是如何建立 Python 与 SolidWorks 的连接。其他不管是新建零件绘图什么的都是通过调用SolidWorks 里的API实现。
如何建立 Python 与 SolidWorks 之间的连接呢?
1、找到你项目所在的虚拟环境下的makepy.py。
我的虚拟环境是Myenv1:
2、运行后分别选择SOLIDWORKS 20XX Type library和SOLIDWORKS 20XX Constant type library的文件,选择ok后,运行窗会出现一行地址,根据地址找到对应的文件。
地址里的文件如下:
3、将上方红色的py文件复制出一份副本,命名为为swconnect(8开头的)和swconst(4开头的)。
4、将起复制到虚拟环境下win32com的client。
大功告成!
接下来就是写代码实现了:
运行结果:
代码如下:
import time import math import win32com.client from win32com.client import VARIANT import pythoncom swApp = win32com.client.Dispatch("SldWorks.Application") swApp.Visible =True time.sleep(2)# 新建零件 template_path =r"C:\ProgramData\SolidWorks\SOLIDWORKS 2021\templates\gb_part.prtdot" swModel = swApp.NewDocument(template_path,0,0,0)if swModel isNone:raise RuntimeError("❌ 新建失败")print("✅ 成功新建零件文档") modelView = swModel.ActiveView if modelView: modelView.FrameState =1 swModelExt = swModel.Extension swSketchMgr = swModel.SketchManager swFeatMgr = swModel.FeatureManager arg_null = VARIANT(pythoncom.VT_DISPATCH,None)# === 正八边形 === swModelExt.SelectByID2("Front Plane","PLANE",0,0,0,False,0, arg_null,0) swSketchMgr.InsertSketch(True) R =1/(2* math.sin(math.pi /8)) points =[]for i inrange(8): angle = i *(2* math.pi /8) x = R * math.cos(angle) y = R * math.sin(angle) points.append((x, y))for i inrange(8): x1, y1 = points[i] x2, y2 = points[(i +1)%8] swSketchMgr.CreateLine(x1, y1,0, x2, y2,0) swSketchMgr.InsertSketch(True)# === 拉伸 0.5 m === extrude = swFeatMgr.FeatureExtrusion2(True,False,False,0,0,0.5,0.0,False,False,0.0,0.0,False,False,0.0,0.0,False,False,False,0,0,False,False,False)if extrude isNone:raise RuntimeError("❌ 拉伸失败")print("✅ 已完成拉伸")代码挺简单的,一看就知道意图,也没什么好讲的。
既然已经打通了,那就可以学习 SolidWorks 的API,然后尽情开发吧!