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

solidwors插件 开发————仙盟创梦IDE

SolidWorks VBS

SolidWorks 支持通过 VBScript(.vbs)脚本 进行简单的二次开发(如自动化建模、批量操作等),但严格来说这属于 脚本编程,而非传统的插件(Plug-in)开发(插件通常基于 C#、等编译型语言)。以下是 VBS 脚本开发的核心要点 和示例:

一、开发环境准备

  1. SolidWorks 对象模型
    VBS 脚本通过调用 SolidWorks 的 COM 对象接口 控制软件,需了解其核心对象关系:

    • SldWorks:SolidWorks 应用程序对象(入口)。
    • ModelDoc2:文档对象(零件、装配体、工程图)。
    • PartDoc/AssemblyDoc/DrawingDoc:具体文档类型对象。
    • Feature/Sketch/Dimension:特征、草图、尺寸等对象。
  2. 引用 SolidWorks COM 库

基础脚本示例:创建零件并拉伸

' 连接或启动 SolidWorks
Set swApp = CreateObject("SldWorks.Application")
swApp.Visible = True ' 显示界面' 创建零件文档
Set part = swApp.NewPart()
Set model = part.GetModelDoc2()' 创建草图(前视基准面)
Set sketchPlane = model.GetPlane(3) ' 前视基准面的 ID 为 3
model.SetCurrentPlane(sketchPlane)
model.SendMsgToActiveView("Select")
model.SketchManager.InsertSketch True ' 激活草图' 绘制矩形(草图坐标:原点为中心)
Set sketchMgr = model.SketchManager
Set rect = sketchMgr.CreateLine2(-25, 0, 25, 0) ' 水平线
sketchMgr.CreateLine2(25, 0, 25, 25) ' 垂直线(右)
sketchMgr.CreateLine2(25, 25, -25, 25) ' 水平线(上)
sketchMgr.CreateLine2(-25, 25, -25, 0) ' 垂直线(左)
model.SketchManager.ConvertTo2DSketch ' 闭合草图' 退出草图并拉伸
model.FeatureManager.ExitSketch
Set extrudeFeat = model.FeatureManager.InsertExtrude2( _True, False, False, 0, 10, 0, 0, 0, 0, 0, 0, False) ' 拉伸高度 10mm

 

修改尺寸

  • 遍历草图尺寸并修改数值
For Each dim In model.SketchManager.GetSketch.DimensionsIf dim.GetName = "D1@草图1" Thendim.SetValue3 20, 2, 0 ' 修改尺寸为 20mmEnd If
Next

批量操作(如批量保存文件)

Dim files()
files = Array("文件1.sldprt", "文件2.sldprt") ' 文件名列表
For Each file In filesSet model = swApp.OpenDoc(file, 1, 0, "") ' 打开零件(1 表示零件类型)model.SaveAs "D:\备份\" & file, 0, 0 ' 另存为新路径model.Close()
Next

插件开发

SolidWorks 的 C# 插件开发基于 SolidWorks API(COM 接口),通过 .NET 框架实现与软件的深度集成(如自定义工具栏、自动建模、工程图批量处理等)。以下是 核心开发流程 和示例:

一、开发环境搭建

  1. 安装依赖

    • 安装 SolidWorks(需与开发目标版本一致)。
    • 安装 SolidWorks SDK(随 SolidWorks 安装包提供,勾选 “API 工具”)。
    • 安装 Visual Studio(推荐 2019/2022,需启用 “.NET 桌面开发” 工作负载)。
  2. 创建项目

    • 打开 Visual Studio,新建 类库(.NET Framework) 项目,目标框架选择 .NET Framework 4.8(SolidWorks 2020+ 支持)。
    • 添加 SolidWorks API 引用:
      • 在 “解决方案资源管理器” 中右键 “引用”,选择 “添加引用”。
      • 浏览至 SolidWorks 安装目录(如 C:\Program Files\SolidWorks Corp\SolidWorks),引用以下 DLL:
        • SolidWorks.Interop.sldworks.dll(核心接口)
        • SolidWorks.Interop.swconst.dll(常量定义)
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;public class MyAddIn : ISwAddIn
{private SldWorks swApp; // SolidWorks 应用程序对象private int addInID;    // 插件 ID// 插件加载时调用public bool ConnectToSW(object ThisSW, int Cookie){swApp = (SldWorks)ThisSW;addInID = Cookie;// 注册命令(如添加菜单/按钮)RegisterCommand();return true;}// 插件卸载时调用public bool DisconnectFromSW(){// 注销命令UnregisterCommand();swApp = null;return true;}// 注册自定义命令(示例:添加菜单按钮)private void RegisterCommand(){int cmdID = 1001; // 自定义命令 IDswApp.AddCommandItem2(addInID, cmdID, "MyCommand", "示例命令", "点击执行操作", swconst.swCommandItemType_e.swCommandItemType_Button, "Resources\\icon.ico", "Resources\\icon_small.ico");swApp.SetCommandHandler(cmdID, true, ref this); // 关联命令处理函数}// 注销命令private void UnregisterCommand(){swApp.RemoveCommandItem(addInID, 1001, swconst.swCommandItemType_e.swCommandItemType_Button);}// 处理命令点击事件(需实现 _ISwAddInCallback 接口)public void OnCommand(int CmdID){if (CmdID == 1001){// 执行自定义逻辑(如创建零件)CreatePart();}}
}

 

 创建零件并添加拉伸特征

private void CreatePart()
{// 创建零件文档ModelDoc2 part = swApp.NewPart();part = (ModelDoc2)swApp.ActiveDoc;// 绘制草图(前视基准面)part.SetCurrentPlane((Plane)part.GetPlane((int)swconst.swPlaneName_e.swPlaneFront));part.SketchManager.InsertSketch(true);SketchManager sketchMgr = part.SketchManager;// 绘制矩形(原点为中心)sketchMgr.CreateLine2(-25, 0, 25, 0); // 水平线sketchMgr.CreateLine2(25, 0, 25, 25); // 垂直线(右)sketchMgr.CreateLine2(25, 25, -25, 25); // 水平线(上)sketchMgr.CreateLine2(-25, 25, -25, 0); // 垂直线(左)part.SketchManager.ConvertTo2DSketch(); // 闭合草图// 退出草图并拉伸part.FeatureManager.ExitSketch();object[] args = { true, false, false, 0, 10.0, 0, 0, 0, 0, 0, 0, false };part.FeatureManager.InsertExtrude2(args, 0); // 拉伸高度 10mm
}

遍历打开的文档

private void ListOpenDocuments()
{int docCount = swApp.GetDocumentCount();for (int i = 1; i <= docCount; i++){ModelDoc2 doc = (ModelDoc2)swApp.GetDocument(i);MessageBox.Show($"文档名称:{doc.GetPathName()}\n类型:{doc.GetType()}");}
}

注册插件(两种方式)

  • 手动注册
    编译生成 DLL 后,在 SolidWorks 中依次点击 工具 > 插件 > 浏览,选择生成的 DLL 文件并勾选启用。
  • 代码自动注册
    在项目属性中设置 “生成后事件”,使用 regasm 工具注册(需管理员权限)
regasm "$(TargetPath)" /codebase /tlb

高级功能扩展

  1. 自定义用户界面

    • 添加工具栏按钮、菜单或 PropertyManager 面板:

      csharp

      // 添加工具栏按钮
      swApp.AddCommandManagerTab2("MyTools", "我的工具", 0, "Resources\\tab_icon.ico");
      swApp.AddCommandItemToTab("MyTools", cmdID, swconst.swCommandItemType_e.swCommandItemType_Button);
      
  2. 事件监听

    • 订阅 SolidWorks 事件(如文档打开、保存):

      csharp

      SldWorksEvents_Event swEvents = (SldWorksEvents_Event)swApp;
      swEvents.FileOpen += OnFileOpen; // 注册文档打开事件private void OnFileOpen(string fileName)
      {MessageBox.Show($"打开文档:{fileName}");
      }
      
  3. 性能优化

    • 使用 ModelDoc2.SetUserPreferenceToggle 关闭重建预览:

      csharp

      part.SetUserPreferenceToggle((int)swUserPreferenceToggleOptions_e.swToggleOptions_RebuildOnModify, false);
      

六、常见问题与解决方案

  1. COM 接口异常

    • 确保 SolidWorks 已启动,或通过 Marshal.ReleaseComObject 释放对象引用。
    • 避免跨线程操作 COM 对象,使用 STAThread 特性标记主入口。
  2. 版本兼容性

    • 不同 SolidWorks 版本的 API 可能存在差异,需通过 swApp.GetVersion() 判断版本并适配。
  3. 依赖部署

    • 发布插件时需确保目标计算机安装了对应版本的 SolidWorks 和 .NET Framework,并注册插件 DLL。

参考资源

  • SolidWorks API 帮助文档:安装 SolidWorks 后,在 “开始菜单” 中搜索 SolidWorks API Help
  • 官方示例代码:SolidWorks SDK 安装目录下的 samples\api 文件夹。

阿雪技术观

元筋牢封固,后天化先天,未来之窗 生命对抗螺旋算法LAAM。自从中年后,很多了记忆减退,学习力减弱,直到耄耋之年。系统不在于新,而在于知道自己在哪里,然后做出正确选择。

普通人想要创造出从没见过的新东西,真不是件容易事。老记着过去的事儿吧,又会妨碍发挥;可要是完全不依靠过去的经验,直接去学全新的东西,也难。所以说工具的关键,不在于创造本身,而是能把过去的经验整合起来,帮助大家站在“前人肩膀”上突破,这样人们就不用花大量时间去记以前的事儿,能更快实现从量变到质变的突破啦。

 The essence is firmly sealed, transforming acquired knowledge into innate wisdom, representing the window to the future. Life fights against the spiral algorithm LAAM. Since reaching middle age, many have experienced a decline in memory and learning ability, continuing to old age. The system does not rely on novelty, but on knowing where you are, and then making the right choices.For ordinary people, creating something completely new that has never been seen before is truly not an easy task. Holding onto past experiences can hinder performance; however, if one completely disregards past experiences and directly learns something entirely new, it is also challenging. Thus, the key to tools lies not in the creation itself, but in the ability to integrate past experiences, helping individuals to break through while standing on the 'shoulders of giants,' so that people do not have to spend a lot of time remembering past events, and can achieve breakthroughs more quickly from quantitative change to qualitative change.

 

相关文章:

  • uniapp开发4--实现耗时操作的加载动画效果
  • 按键精灵ios脚本新增元素功能助力辅助工具开发(三)
  • 应用探析|千眼狼PIV测量系统在职业病防治中的应用
  • 小天互连即时通讯:制造行业沟通协作的高效纽带
  • JavaScript 接收并解析后端发送的 JSON 数据,同时将数据以美观的方式展示在页面上
  • Kotlin-类和对象
  • TCP首部格式及三次握手四次挥手
  • 【学习笔记】Shell编程---流程控制语句
  • 【用「概率思维」重新理解生活】
  • 深入探讨 Java 性能术语与优化实践
  • 12.1寸工业液晶屏M121XGV20-N10显示单元技术档案
  • ubuntu22.04编译PX4无人机仿真实践
  • Git命令起别名
  • Cursor开发酒店管理系统
  • 【AI论文】健康的大型语言模型(LLMs)?——评估大型语言模型对英国政府公共健康信息的掌握程度
  • 什么是序列化与反序列化
  • Kubernetes 标签和注解
  • Unity
  • [ linux-系统 ] 进程概念与基本操作
  • 【大模型】DeepResearcher:通用智能体通过强化学习探索优化
  • 大外交|巴西总统卢拉第六次访华签署20项协议,“双方都视对方为机遇”
  • 《克莱默夫妇》导演罗伯特·本顿去世,终年92岁
  • “80后”德州市接待事务中心副主任刘巍“拟进一步使用”
  • 独行侠以1.8%概率获得状元签,NBA原来真的有剧本?
  • 广东省人大教科文卫委原主任委员梁万里被开除党籍:退休后受贿仍不知止
  • 缺字危机:一本书背后有多少“不存在”的汉字?