C# SolidWorks 二次开发 API —遍历零件特征

C# SolidWorks 二次开发 API —遍历零件特征

下面是如何遍历零件特征:

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

            if (swApp != null)
            {
                ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

                //第一个特征
                Feature swFeat = (Feature)swModel.FirstFeature();

                //遍历
                Utility.TraverseFeatures(swFeat, true);
            }
        }



//Utility.cs

        /// <summary>
        /// 遍历特征
        /// </summary>
        /// <param name="thisFeat"></param>
        /// <param name="isTopLevel"></param>
        public static void TraverseFeatures(Feature thisFeat, bool isTopLevel)
        {
            Feature curFeat = default(Feature);
            curFeat = thisFeat;

            while ((curFeat != null))
            {
                //输出特征名称
                Debug.Print(curFeat.Name);

                Feature subfeat = default(Feature);
                subfeat = (Feature)curFeat.GetFirstSubFeature();

                while ((subfeat != null))
                {
                    TraverseFeatures(subfeat, false);
                    Feature nextSubFeat = default(Feature);
                    nextSubFeat = (Feature)subfeat.GetNextSubFeature();
                    subfeat = nextSubFeat;
                    nextSubFeat = null;
                }

                subfeat = null;

                Feature nextFeat = default(Feature);

                if (isTopLevel)
                {
                    nextFeat = (Feature)curFeat.GetNextFeature();
                }
                else
                {
                    nextFeat = null;
                }

                curFeat = nextFeat;
                nextFeat = null;
            }
        }

 

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

VBA SolidWorks 二次开发 API —从宏开始

VBA SolidWorks 二次开发 API —从宏开始

Macro是可以用来录制一些操作的工具,然后你可以看到具体内部执行的一些代码。通过这些代码,我们可以更快更直接的找到所需要查询的API函数。我们以最简单的做一个拉伸特征开始,看如何找到对应的API

1.显示Macro工具条:

2. 点击工具条上的录制按钮,然后手动进行零件的新建,选择一个基准面,画一个圆,拉伸特征。然后点击工具条的停止按钮,指定保存路径以及文件名。 最后点击编辑宏,选择刚刚保存的文件。

3.那么我们就可以看到刚才录制操作代码了:

4. 在不太熟悉的情况下,可以在VBA的界面上,进入到Main代码之后,按F8,进行逐步调试,看哪一步是我们想了解的操作。

5.在我们知道 FeatureExtrusion2 这一步是创建拉伸特征之后 ,我们就可以去API帮助里面查询对应的API了。 

进去之后 ,注意要找到最新的,有很多旧的API已经被弃用了。

这个才是最新的:

然后查询结果中还有一些示例(后面以Example(VBA C# VB.net)的),可以进一步进行深入学习。

对于一些宏操作无法录制出来的命令,只能通过API帮助去找对应的信息了。

建议把solidworks设计为英文界面,这个有助于在帮助中查找到对应的信息。

 

 

posted @
2019-09-16 14:34 
painezeng  阅读(
287)  评论(
0
编辑 
收藏 
举报

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
编辑 
收藏 
举报