C# SolidWorks 二次开发 API—获取所有特征名称思路2

C# SolidWorks 二次开发 API—获取所有特征名称思路2

之前那篇各种遍历的博文中有写过怎么遍历零件中的特征 。
这两天翻了翻api,看看有没有更简单的办法获取所有特征的名称。
发现发一个新的办法,分享一下。


看到了吗,之前这里有个FeatureNames,是属于这个不熟悉的单词里的。

突然秒懂呀,想起来Solidworks里面有个功能是可以统计特征的复杂程度以及重建时间等信息的。

再深入一点点,看看这个怎么描述的。

哇,太直接了,返回的直接是数组。是不是比遍历更直接?
而且里面还有例子:

我就直接贴了,大小写下注释:

This example shows how to get the statistics of all of the features in a part document.

//-------------------------------------------
// Preconditions:
// 1. Open a part that has multiple features. 打一个带多个特征的零件
// 2. Open the Immediate window.
//
// Postconditions:
// 1. Gets the statistics for the features in 得到零件的特征统计信息
// the part.
// 2. Examine the Immediate window.
//-------------------------------------------
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System;
using System.Diagnostics;
namespace GetFeatureStatisticsForPart_CSharp.csproj
{
    partial 
 class SolidWorksMacro
    {
        public  void Main()
        {
            FeatureStatistics swFeatStat = default(FeatureStatistics);
            FeatureManager swFeatMgr = default(FeatureManager);
            ModelDoc2 swModel = default(ModelDoc2);
            String[] featnames = null;
            Int32[] feattypes = null;
            Object[]  features = null;
            Double[] featureUpdateTimes = null;
            Double[] featureUpdatePercentTimes = null;
            int iter = 0;

            swModel = (ModelDoc2)swApp.ActiveDoc;
            swFeatMgr = swModel.FeatureManager;
            swFeatStat = swFeatMgr.FeatureStatistics;

            swFeatStat.Refresh();

            Debug.Print("Model name: " + swFeatStat.PartName); //名称
            Debug.Print(" Number of features: " + swFeatStat.FeatureCount);//特征数量
            Debug.Print(" Number of solid bodies: " + swFeatStat.SolidBodiesCount);//实体数量 
            Debug.Print(" Number of surface bodies: " + swFeatStat.SurfaceBodiesCount);//面体数量 
            Debug.Print(" Total rebuild time: " + swFeatStat.TotalRebuildTime);//重建时长
            Debug.Print("");
            features  = (Object[])swFeatStat.Features;
            featnames = (String[])swFeatStat.FeatureNames;
            feattypes = (Int32[])swFeatStat.FeatureTypes;
            featureUpdateTimes = (Double[])swFeatStat.FeatureUpdateTimes;
            featureUpdatePercentTimes = (Double[])swFeatStat.FeatureUpdatePercentageTimes;
            if  ((featnames != null))
            {
                for  (iter = 0; iter <= featnames.GetUpperBound(0); iter++)
                {
                    Debug.Print(" Feature name: " + featnames[iter]); //特征名称
                    Debug.Print(" Feature created: " + ((Feature)features[iter]).DateCreated);//创建时间
                    Debug.Print(" Feature type as defined in sw_SelectType_e: " + feattypes[iter]);//类型
                    Debug.Print(" Update time: " + featureUpdateTimes[iter]);//更新时间
                    Debug.Print(" Update % time: " + featureUpdatePercentTimes[iter]);//特征更新时长
                    Debug.Print("");
                }
            }
        }
        public SldWorks swApp; //这个是要自己处理得到实例对象的。
    }
}

好了,我就拿VBA的跑个结果:

然后可以自己把这个封装一下,变成一个ModelDoc2的扩展方法,后面用起来就非常方便了。
当前 这个适合不需要知道特征之前 的层级关系的时候。

posted @
2022-01-20 09:22 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源

C# SolidWorks二次开发-工程图-更换工程图图纸格式/模板

C# SolidWorks二次开发-工程图-更换工程图图纸格式/模板

这两天有朋友提问,怎么更换工程图模板。
正好晚上还能挤点时间,就来写一篇文件解答一下。
首先,更换工程图模板,你需要知道手动怎么修改。
如下图,我这个没有模板,只有个纸张大小。

对着视图,右键属性。

可以看到我这里没有选择图纸格式:

下面就录制一下宏,先看有没有对应的操作可以记录:
录制的时候我选择了一下标准的a4

应该更改之后 :

发现有了变化,我们看下录到的代码:

更是够简单,里面参数有个a4的值 ,说明我们录到了这个方法,关键字就是SetupSheet5

打开我们的神器:

然后进入最新版本的SetupSheet6:



从上面可以看出来,这个是设置图纸的一些参数,包括图纸格式,比例,上下左右的间距,第一视角或者第三视角。

而且下面还有例子:我就不去看了。

我们就学习一下在C#中写下这个方法:

        private void btnModifyTemplate_Click(object sender, EventArgs e)
        {
            //先打开Measure.slddrw
            SldWorks swApp = Utility.ConnectToSolidWorks();

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

                var swDrawing = (DrawingDoc)swModel; //转换成工程图对象

                var res=  swDrawing.SetupSheet6("Sheet1", (int)swDwgPaperSizes_e.swDwgPaperA3size,
                    (int)swDwgTemplates_e.swDwgTemplateA3size, 1, 5, true, "a3 - din.slddrt", 0, 0, "默认", false, 0, 0, 0, 0, 0, 0);
                if (res)
                {
                    MessageBox.Show("更换成功。");
                }

            }
        }

执行完这个代码:

尺寸确实变了,这个我就不细研究了,也许上面有参数有些不对。

上面代码中参数的1 和 5 就是图纸的比例:

当然,如果 不希望改其它参数,就需要把这些参数设置和之前一样的值 。
可以用过下面这个方法来获取当前图纸的一些参数:

当前如果是其它的,比如公司的模板什么的,可以指定一个完整的路径。

                var res = swDrawing.SetupSheet6("Sheet1", (int)swDwgPaperSizes_e.swDwgPaperA4size,
                    (int)swDwgTemplates_e.swDwgTemplateA4size, 1, 5, true, @"E:\01_Work\22_Gitee\CSharpAndSolidWorks\CSharpAndSolidWorks\TemplateModel\sheetformat\a4 - gb.slddrt", 0, 0, "默认", true, 0, 0, 0, 0, 0, 0);


好了,今天就写这么多了,马上就要过年了,年前不一定有时间再写。提前祝大家过个好年,希望不要被隔离在家。

源代码: https://gitee.com/painezeng/CSharpAndSolidWorks
第一次使用可以看下下面这个视频 :

posted @
2022-01-15 20:43 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源