使用C#对Solidworks二次开发并且制作一款小软件(一)

前言

        Solidworks是一款功能十分强大的三维CAD解决方案,本人使用过一段时间的Solidworks,可以画一些简单的零件。这段时间一直在尝试对其二次开发,做了一个小软件,可以实现几个很基础的功能,谨以此帖记录一下开发过程。

1、环境搭建

        因为Solidworks提供了C#的API接口,所以选用C#编程的Winform界面设计作为开发基础。

        Solidworks版本:2022

        Visual Studio版本:2022

        框架:.NET Framework 4.8

        创建好以后需要在 VS的    工具---NuGet包管理器---管理解决方案的NuGet程序包中添加两个程序集,分别是  SolidWorks.Interop.sldworks  和  SolidWorks.Interop.swconst。

        其中,Solidworks.Interop.sldworks 包含 SolidWorks API 的主要接口和类,允许你通过代码与 SolidWorks 应用程序进行交互。SolidWorks.Interop.swconst 包含 SolidWorks API 中使用的常量。这些常量用于指定各种参数和选项,比如文档类型、特征类型、选择类型等。通过引用这两个程序集,可以在C# 项目中调用 SolidWorks 的 API,从而实现对 SolidWorks 的自动化和定制操作。

         在Form1.cs引入这两个程序集。

2、实现打开sld文件

        定义不同功能的方法

       1、连接solidworks程序

         这部分参考了https://blog.csdn.net/zengqh0314/article/details/100690000的方法。因为该程序的运行基础是线程进行中的Solidworks,所以需要新建Solidworks的连接检测方法,以下为示例代码:        

public Form1()
{
    InitializeComponent();
    swApp = ConnectToSolidWorks();
}


private string filePath; // 存储选择的文件路径
public ISldWorks swApp { get; private set; }
public ModelDoc2 swModel { get; private set; } // 存储当前打开的模型


public static ISldWorks ConnectToSolidWorks()
{
    SldWorks SwApp = null;
    try
    {
        Process[] processArr = Process.GetProcessesByName("SLDWORKS");
        if (processArr.Length > 0)
        {
            SwApp = (SldWorks)Marshal.GetActiveObject("sldWorks.Application");
        }
        else
        {
            MessageBox.Show("SolidWorks 未运行,请先启动 SolidWorks。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            System.Environment.Exit(0); // 如果SolidWorks未运行则强制退出
        }
    }
    catch (COMException)
    {
        try
        {
            SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application");
        }
        catch (COMException)
        {
            try
            {
                SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application.30");
            }
            catch (COMException)
            {
                SwApp = null;
            }
        }
    }

    if (SwApp != null)
    {
        SwApp.Visible = true;
    }
    return SwApp;
}

       尝试连接到已经运行的 SolidWorks 应用程序实例。首先检查是否有名为 "SLDWORKS" 的进程在运行,如果有,则使用  Marshal.GetActiveObject  方法获取运行的 SolidWorks 应用程序对象,否则显示错误消息并退出应用程序。

2、获取文档类型

private int GetDocumentType(string filePath)
{
    string extension = System.IO.Path.GetExtension(filePath).ToLower();
    switch (extension)
    {
        case ".sldprt":
            return (int)swDocumentTypes_e.swDocPART;
        case ".sldasm":
            return (int)swDocumentTypes_e.swDocASSEMBLY;
        case ".slddrw":
            return (int)swDocumentTypes_e.swDocDRAWING;
        default:
            return -1;
    }
}

        根据文件扩展名返回文档类型。.sldprt 对应零件文件,.sldasm 对应装配体文件,.slddrw 对应工程图文件。如果文件扩展名不匹配任何已知类型,则返回 -1。

3、打开Solidworks文件

private ModelDoc2 OpenSolidWorksFile(string filePath)
{
    if (swApp == null)
    {
        MessageBox.Show("SolidWorks 应用程序未连接。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return null;
    }
    try
    {
        int errors = 0;
        int warnings = 0;
        swModel = swApp.OpenDoc6(filePath, GetDocumentType(filePath), (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", ref errors, ref warnings) as ModelDoc2;

        if (swModel == null || errors != 0)
        {
            MessageBox.Show("无法打开文件。错误代码: " + errors, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return null;
        }
        else
        {
            MessageBox.Show("文件已成功打开: " + filePath, "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
            return swModel;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("打开文件时发生错误: " + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return null;
    }
}

        尝试打开指定路径的 SolidWorks 文件。首先检查是否连接到 SolidWorks 应用程序,然后调用 OpenDoc6 方法打开文件,OpenDoc6 是 SolidWorks API 提供的一种方法,用于打开指定路径的 SolidWorks 文件。它可以打开零件文件、装配体文件和工程图文件。可以指定打开文件的选项,如以静默方式打开文件,忽略某些警告等。如果成功打开文件,显示成功消息,否则提示错误消息。 

4、处理按钮点击事件

        一开始想用textbox去获取用户复制粘贴的文件地址,但是操作起来有点复杂,所以想实现以对话框的形式弹出供用户自行选择。在Form1的设计界面添加button:“打开文件” 

        双击按钮进入点击事件,编辑代码:

private void OpenFile_Click(object sender, EventArgs e)
{
    using (OpenFileDialog openFileDialog = new OpenFileDialog())
    {
        openFileDialog.Filter = "SolidWorks 文件 (*.sldprt;*.sldasm;*.slddrw)|*.sldprt;*.sldasm;*.slddrw|所有文件 (*.*)|*.*";
        openFileDialog.Title = "打开 SolidWorks 文件";

        if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
            filePath = openFileDialog.FileName;
            OpenSolidWorksFile(filePath);
        }
    }
}

        使用 OpenFileDialog 显示文件选择对话框,允许用户选择一个 SolidWorks 文件。如果用户选择了文件并点击“确定”,则获取用户选择的文件路径并调用 OpenSolidWorksFile 方法打开文件。

3、测试

        如果没有运行Solidworks,运行程序以后会有如下报错

        并且强行结束进程。 

        再打开Solidworks 2022

        运行程序点击打开文件按钮,会弹出选择文件的对话框

        顺利打开,弹出打开成功提示框。

  • 26
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C# SolidWorks二次开发是指使用C#编程语言来扩展和定制SolidWorks软件的功能。下面是进行C# SolidWorks二次开发的步骤: 1. 环境配置: - 首先,确保您已经安装了SolidWorks软件和Visual Studio开发环境。 - 然后,安装SolidWorks API SDK。您可以在SolidWorks安装包中找到"SolidWorks API SDK.msi"文件,并按照安装向导进行安装。 2. 创建插件Addin: - 打开Visual Studio,并创建一个新的C#项目。 - 在项目中,添加对SolidWorks API的引用。您可以在项目的引用中添加SolidWorks.Interop.sldworks和SolidWorks.Interop.swcommands等引用。 - 创建一个类,并实现SolidWorks的事件接口,例如ISwAddin或ISwAddin2。 - 实现所需的功能,例如创建自定义工具栏、菜单或按钮,并实现其相应的事件处理程序。 3. 运行和调试: - 在Visual Studio中编译和生成项目。 - 将生成的插件文件(.dll文件)复制到SolidWorks的插件目录中,一般为"C:\ProgramData\SolidWorks\SOLIDWORKS 20XX\addins"。 - 启动SolidWorks软件,您应该能够看到您创建的自定义工具栏、菜单或按钮。 - 单击按钮或执行其他操作来测试和调试您的插件功能。 通过以上步骤,您可以开始使用C#编程语言进行SolidWorks二次开发,实现自定义的功能和工具,以满足您的需求。请确保在开发过程中参考官方文档和其他相关教程,以便更好地理解和掌握C# SolidWorks二次开发的技术。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值