当前位置: 首页 > news >正文

deepseek连接solidworks设计一台非标设备 (part1)

deepseek连接solidworks设计一台非标设备

仓库gitee.com/njsgcs/llm_sw


想法是deepseek连接solidworks pywin32的装配体放入新零件功能

然后deepseek从所有零件的列表里

(按照提前写好的信息:比如一个上料机需要(气缸,步进电机))

选出设计这台非标设备所需的零部件

(比如气缸,步进电机等)

然后全部放入装配体文件asm里

deepseek生成一个所有零件相互连接的图graph结构

像这样子

然后每个零件指定几个装配孔和装配面(在零件里用名称提前设置好)

然后把所有东西连接在一起就是一台设备了




等等可以写一个按照信息放入所有选择的零件到原点的实现

然后才是按孔,面把东西连接起来

from sw_server import get_sw_app
import os
import win32com.client
import pythoncom
import timedef create_or_use_assembly(sw_app, template_path=None):"""如果已有装配体打开,则使用它;否则创建一个新的装配体。"""try:# 获取当前活动文档active_doc = sw_app.ActiveDocif active_doc is not None:return active_docexcept Exception as e:print(f"⚠️ 检查活动文档时出错: {e}")# 如果没有打开装配体,创建一个新的print("🔧 未检测到打开的装配体,正在创建新的...")if template_path is None:template_path = r"C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2025\templates\gb_assembly.asmdot"if not os.path.exists(template_path):print(f"⚠️ 模板文件不存在: {template_path}")print("尝试使用 NewAssembly 方法...")try:assembly_doc = sw_app.NewAssembly()if assembly_doc:print("✅ 使用 NewAssembly 成功创建装配体")return assembly_docelse:raise Exception("NewAssembly 返回空对象")except Exception as e:raise Exception(f"NewAssembly 失败: {e}")else:try:assembly_doc = sw_app.NewDocument(template_path, 0, 0, 0)if assembly_doc:print("✅ 使用模板成功创建装配体")# 等待装配体完全初始化time.sleep(1)return assembly_docelse:raise Exception("NewDocument 返回空对象")except Exception as e:raise Exception(f"NewDocument 失败: {e}")return Nonedef add_components_to_assembly(sw_app, assembly_model, part_paths):"""向装配体中添加零件组件。:param sw_app: SolidWorks 应用程序对象:param assembly_model: 装配体模型 (IModelDoc2):param part_paths: 零件路径列表"""# 确保COM库初始化pythoncom.CoInitialize()# 获取装配体标题(安全方式)assembly_title = "默认装配体"try:temp_title = assembly_model.GetTitleif temp_title and isinstance(temp_title, str):assembly_title = temp_titleprint(f"当前装配体: {assembly_title}")except Exception as e: print(f"⚠️ 获取装配体标题失败: {e}")error = win32com.client.VARIANT(pythoncom.VT_BYREF | pythoncom.VT_I4, 0)warnings=win32com.client.VARIANT(pythoncom.VT_BYREF | pythoncom.VT_I4, 0)Part = sw_app.ActivateDoc3(assembly_title, True, 0,error)# 使用更直接的方式调用装配体方法,避免类型转换问题base_path = r"solidworksdata\一体式油水分离器"for part_name in part_paths:# 修复路径构建,去除可能的空格part_name = part_name.strip()  # 去除首尾空格part_path = f"{part_name}.sldprt"full_path = os.path.join(base_path, part_path)full_path = os.path.abspath(full_path)# 清理路径中的多余空格full_path = full_path.replace("\ ", " ").replace(" \\", "\\")if not os.path.exists(full_path):print(f"⚠️ 文件不存在: {full_path}")continueprint(f"正在插入零件: {full_path}")# 打开文档part_doc = sw_app.OpenDoc6(full_path,  # 文件路径1,          # 文档类型 (1=零件)32,         # 打开选项 (32=Quiet打开,无用户界面)"",         # 配置名称error,     # 错误变量warnings    # 警告变量)try:# 使用更简单的方式直接插入组件,不预先打开零件component = Part.AddComponent5(full_path,      # CompName: 零件路径0,              # ConfigOption: 配置选项 (0=当前配置)"",             # NewConfigName: 新配置名称False,          # UseConfigForPartReferences: 是否使用配置作为参考"",             # ExistingConfigName: 现有配置名称0.0,            # X: X坐标0.0,            # Y: Y坐标0.0             # Z: Z坐标)sw_app.CloseDoc(full_path)if component:try:comp_name = component.Name2except:comp_name = os.path.basename(full_path)print(f"✅ 成功插入零件: {comp_name}")else:print(f"❌ 插入失败: {full_path}")except Exception as e:print(f"❌ 插入零件 {part_name} 时出错: {e}")# 如果 AddComponent5 失败,尝试使用更简单的方法try:print(f"  尝试使用 AddComponent2 方法...")component2 = assembly_model.AddComponent2(full_path,0,  # 默认对齐0.0, 0.0, 0.0  # 位置)if component2:print(f"  ✅ 使用 AddComponent2 成功插入零件: {part_name}")else:print(f"  ❌ AddComponent2 也失败: {full_path}")except Exception as e2:print(f"  ❌ AddComponent2 方法也失败: {e2}")def add_part(part_files):# 可选:指定模板路径,或设为 None 让程序尝试 NewAssemblytemplate_path = r"C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2025\templates\gb_assembly.asmdot"# === 主逻辑 ===sw_app = get_sw_app()if not sw_app:print("❌ 请先启动 SolidWorks")return ("❌ 请先启动 SolidWorks")try:assembly_model = create_or_use_assembly(sw_app, template_path)if assembly_model:add_components_to_assembly(sw_app, assembly_model, part_files)print("🎉 所有零件处理完成!")return ("🎉 所有零件处理完成!")else:print("❌ 未能创建或获取装配体")return ("❌ 未能创建或获取装配体")except Exception as e:print(f"❌ 操作失败: {e}")# =========================  
# 使用示例
# =========================
if __name__ == "__main__":# === 配置参数 ===part_files = ["电机","主体1",# 添加更多零件...]add_part(["电机","主体1",# 添加更多零件...]
)

http://www.dtcms.com/a/348698.html

相关文章:

  • 阿里云ECS服务器搭建ThinkPHP环境
  • 互联网大厂AI/大模型应用开发工程师面试剧本与解析
  • 阿里云云数据库RDS PostgreSQL管控功能使用
  • 基于SpringBoot的婚纱影楼服务预约平台【2026最新】
  • Spring AI 学习笔记(2)
  • GitHub 热榜项目 - 日榜(2025-08-24)
  • Wireshark USRP联合波形捕获(下)
  • windows上如何实现把指定网段的流量转发到指定的端口,有哪些界面化的软件用来配置完成,类似于 Linux中的iptables规则实现
  • 6.1Element UI布局容器
  • 【Luogu】P2602 [ZJOI2010] 数字计数 (数位DP)
  • 基于大模型的对话式推荐系统技术架构设计-- 大数据平台层
  • 07 - spring security基于数据库的账号密码
  • window11无法连接Fortinet SSL VPN
  • Elasticsearch如何确保数据一致性?
  • 『深度编码』操作系统-进程之间的通信方法
  • 记录一下TVT投稿过程
  • 阿里云大模型应用实战:从技术落地到业务提效
  • Dify 从入门到精通(第 53/100 篇):Dify 的分布式架构(进阶篇)
  • 兑换汽水瓶
  • 关于并查集
  • 数字营销岗位需要具备的能力有哪
  • Java 内存模型(JMM)与并发可见性:深入理解多线程编程的基石
  • Flink session cluster与Flink per-job cluster区别
  • Zynq开发实践(Verilog、仿真、FPGA和芯片设计)
  • Linux-函数的使用-编写监控脚本
  • 栈的创建和基本操作
  • Arbess V1.1.4版本发布,支持Mysql数据库,Ubuntu系统,新增SSH及Hadess上传下载任务
  • week4-[字符数组]月份
  • TCP连接与UDP协议
  • 构建现代前端工程:Webpack/Vite/Rollup配置解析与最佳实践