C# SolidWorks 二次开发 API —修改零件

C# SolidWorks 二次开发 API —修改零件

如何修改当前零件:

这一次示例包含了:增加配置,增加特征, 压缩特征,修改尺寸,删除特征

直接上代码:

 private void Btn_ChangeDim_Click(object sender, EventArgs e)
        {
            //请先打开零件: ..\TemplateModel\clamp1.sldprt
            ISldWorks swApp = Utility.ConnectToSolidWorks();

            if (swApp != null)
            {
                //1.增加配置
                ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;
                string NewConfigName = "NewConfig";
                bool boolstatus = swModel.AddConfiguration2(NewConfigName, "", "", true, false, false, true, 256);

                swModel.ShowConfiguration2(NewConfigName);

                //2.增加特征(选择一条边,加圆角)
                boolstatus = swModel.Extension.SelectByID2("", "EDGE", 3.75842546947069E-03, 3.66350829162911E-02, 1.23295158888936E-03, false, 1, null, 0);

                Feature feature = swModel.FeatureManager.FeatureFillet3(195, 0.000508, 0.01, 0, 0, 0, 0, null, null, null, null, null, null, null);

                //3.压缩特征

                feature.Select(false);

                swModel.EditSuppress();

                //4.修改尺寸
                swModel.Parameter("D1@Fillet8").SystemValue = 0.000254; //0.001英寸

                swModel.EditRebuild3();

                //5.删除特征

                feature.Select(false);
                swModel.EditDelete();
            }
        }

完整代码见:https://gitee.com/painezeng/CSharpAndSolidWorks

posted @
2019-09-12 16:21 
painezeng  阅读(
195)  评论(
0
编辑 
收藏 
举报

C# SolidWorks 二次开发 API —读取零件相关属性

C# SolidWorks 二次开发 API —读取零件相关属性

如何读取零件相关属性


这一篇看下如何读取属性:

直接上代码:

代码如下:

      private void BtnGetPartData_Click(object sender, EventArgs e)
        {
            //请先打开零件: ..\TemplateModel\clamp1.sldprt

            ISldWorks swApp = Utility.ConnectToSolidWorks();

            if (swApp != null)
            {
                ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc; //当前零件

                //获取通用属性值
                string project = swModel.GetCustomInfoValue("", "Project");

                swModel.DeleteCustomInfo2("", "Qty"); //删除指定项
                swModel.AddCustomInfo3("", "Qty", 30, "1"); //增加通用属性值

                var ConfigNames = (string[])swModel.GetConfigurationNames(); //所有配置名称

                Configuration swConfig = null;

                foreach (var configName in ConfigNames)//遍历所有配置
                {
                    swConfig = (Configuration)swModel.GetConfigurationByName(configName);

                    var manger = swModel.Extension.CustomPropertyManager[configName];
                    //删除当前配置中的属性
                    manger.Delete2("Code");
                    //增加一个属性到些配置
                    manger.Add3("Code", (int)swCustomInfoType_e.swCustomInfoText, "A-" + configName, (int)swCustomPropertyAddOption_e.swCustomPropertyReplaceValue);
                    //获取此配置中的Code属性
                    string tempCode = manger.Get("Code");
                    //获取此配置中的Description属性

                    var tempDesc = manger.Get("Description");
                    Debug.Print("  Name of configuration  ---> " + configName + " Desc.=" + tempCode);
                }
            }
            else
            {
                MessageBox.Show("Please open a part first.");
            }
        }
  

增加一个信息,读取summy里面的信息需要用

swModel.SummaryInfo((int)swSummInfoField_e.swSumInfoComment)

posted @
2019-09-10 16:47 
painezeng  阅读(
286)  评论(
0
编辑 
收藏 
举报

C# SolidWorks 二次开发 API —新零件的创建以及打开已有文件

C# SolidWorks 二次开发 API —新零件的创建以及打开已有文件

这一篇我们来看一下如何进行新零件的创建以及打开已有文件,我们以零件为例。


继续建一个按钮来测试

逻辑如下:首先得到文件模板,因为我们手动创建新零件时也是要选择对应的模板的。

Solidworks中的设置如下:

代码:

 private void btnOpenAndNew_Click(object sender, EventArgs e)
        {
            ISldWorks swApp = Utility.ConnectToSolidWorks();

            if (swApp != null)
            {
                //通过GetDocumentTemplate 获取默认模板的路径 ,第一个参数可以指定类型
                string partDefaultTemplate = swApp.GetDocumentTemplate((int)swDocumentTypes_e.swDocPART, "", 0, 0, 0);
                //也可以直接指定slddot asmdot drwdot
                //partDefaultTemplate = @"xxx\..prtdot";

                var newDoc = swApp.NewDocument(partDefaultTemplate, 0, 0, 0);

                if (newDoc != null)
                {
                    //创建完成
                    swApp.SendMsgToUser("Create done.");

                    //下面获取当前文件
                    ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

                    //选择对应的草图基准面
                    bool boolstatus = swModel.Extension.SelectByID2("Plane1", "PLANE", 0, 0, 0, false, 0, null, 0);

                    //创建一个2d草图
                    swModel.SketchManager.InsertSketch(true);

                    //画一条线 长度100mm  (solidworks 中系统单位是米,所以这里写0.1)
                    swModel.SketchManager.CreateLine(0, 0, 0, 0, 0.1, 0);

                    //关闭草图
                    swModel.SketchManager.InsertSketch(true);

                    string myNewPartPath = @"C:\study\myNewPart.SLDPRT";

                    //保存零件.
                    int longstatus = swModel.SaveAs3(myNewPartPath, 0, 1);

                    //关闭零件
                    swApp.CloseDoc(myNewPartPath);
                    swApp.SendMsgToUser("Closed");
                    //重新打开零件.
                    swApp.OpenDoc(myNewPartPath, (int)swDocumentTypes_e.swDocPART);

                    swApp.SendMsgToUser("Open completed.");
                }
            }
        }

这里我们以创建一个新零件为例(第一次是Part1  第二次就是Part2….):

 

接着会继续创建一个新草图,绘制一条一线。然后把文件保存到指定路径。最后闭文件后再打开。

源代码见码云仓库:https://gitee.com/painezeng/CSharpAndSolidWorks

 

posted @
2019-09-10 13:23 
painezeng  阅读(
247)  评论(
0
编辑 
收藏 
举报

C# SolidWorks 二次开发 API—连接solidworks

C# SolidWorks 二次开发 API—连接solidworks

从事二次开发十几年了,一直没有时间好好整理笔记,最近准备花一些时间整理一下。

Solidworks二次开发需要一些C# Vb.net C++ 等编程语言的基础知识,大多使用Visual Studio进行开发。

再一个就是Solidworks要熟悉或者精通,因为任何手工都无法实现的东西,基本上做二次开发也不能实现。

那我们从最基础的连接到solidworks开始:

1.新建一个窗体程序或者控制台应用,我们以窗体程序为例:

加上一个按钮:

2.用NuGet查找solidworks进行dll的引用。自己选择对应版本或者其它包装好的库

(至少包括SolidWorks.Interop.sldworks ,SolidWorks.Interop.swconst,其它的可以删除掉)

3.新建一个公共类 

using SolidWorks.Interop.sldworks;
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace CSharpAndSolidWorks
{
    public class Utility
    {
        public static ISldWorks SwApp { get; private set; }

        public static ISldWorks ConnectToSolidWorks()
        {
            if (SwApp != null)
            {
                return SwApp;
            }
            else
            {
                Debug.Print("connect to solidworks on " + DateTime.Now);
                try
                {
                    SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application");
                }
                catch (COMException)
                {
                    try
                    {
                        SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application.23");//2015
                    }
                    catch (COMException)
                    {
                        try
                        {
                            SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application.26");//2018
                        }
                        catch (COMException)
                        {
                            MessageBox.Show("Could not connect to SolidWorks.", "SolidWorks", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                            SwApp = null;
                        }
                    }
                }

                return SwApp;
            }
        }
    }
}

上面这个代码块是C# 连接Solidworks的代码(EXE程序), 默认是solidworks已经被用户打开了。

这种连接不打开solidworks会提示连接失败。

这样我们可以获取到当前第一个运行的solidworks对象。(exe方式永远只能获取到第一个运行的solidworks对象。dll方式是集成在对应的运行进程中的,所以可以多个同时操作)

4.给按钮增加代码:

 private void BtnConnect_Click(object sender, EventArgs e)
        {
            ISldWorks swApp = Utility.ConnectToSolidWorks();

            if (swApp != null)
            {
                string msg = "This message from C#. solidworks version is " + swApp.RevisionNumber();

                swApp.SendMsgToUser(msg);
            }
        }

运行之后,点击按钮,会提示如下消息,表示我们用Visual Studio连接到已经打开的Solidworks成功了 。

可在此下载源码:https://gitee.com/painezeng/CSharpAndSolidWorks

—————————————–

关于连接可以参考下面这一文章:

Solidworks的多开操作与连接指定版本Solidworks

https://blog.csdn.net/zengqh0314/article/details/105565915

 

posted @
2019-09-10 10:01 
painezeng  阅读(
630)  评论(
0
编辑 
收藏 
举报

获取域用户信息

获取域用户信息

 Public Shared ReadOnly Property UserName As String
        Get
            Dim result As String
            Using directoryEntry As DirectoryEntry = New DirectoryEntry("LDAP://" + IPGlobalProperties.GetIPGlobalProperties().DomainName.ToLower())
                Using directorySearcher As DirectorySearcher = New DirectorySearcher(directoryEntry)
                    directorySearcher.Filter = "(sAMAccountName=" + Environment.UserName + ")"
                    Dim searchResult As SearchResult = directorySearcher.FindOne()
                    result = searchResult.Properties("mail")(0).ToString().Substring(0, searchResult.Properties("mail")(0).ToString().IndexOf("@"c))
                End Using
            End Using
            Return result
        End Get
    End Property
    Public Function UserLocation()

        Dim text As String = IPGlobalProperties.GetIPGlobalProperties().DomainName.ToLower()
        Dim flag As Boolean = text = "myDomain".ToLower()
        Dim result As String
        If flag Then
            Using directoryEntry As DirectoryEntry = New DirectoryEntry("LDAP://" + IPGlobalProperties.GetIPGlobalProperties().DomainName.ToLower())
                Using directorySearcher As DirectorySearcher = New DirectorySearcher(directoryEntry)
                    directorySearcher.Filter = "(sAMAccountName=" + Environment.UserName + ")"
                    Dim searchResult As SearchResult = directorySearcher.FindOne()
                    Try
                        Dim a As String = searchResult.Properties("division")(0).ToString()
                        If a = "CN" Then
                            Return "China"
                        End If
                  
                    Catch ex As Exception
                        MessageBox.Show(ex.Message)
                    End Try
                End Using
            End Using
            MessageBox.Show("Unknown User Location recognized!", "Please note:", MessageBoxButtons.OK, MessageBoxIcon.Hand)
            result = String.Empty
        Else
            result = text
        End If
        Return result

    End Function

posted @
2018-07-03 22:41 
painezeng  阅读(
65)  评论(
0
编辑 
收藏 
举报