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的扩展方法,后面用起来就非常方便了。
 当前 这个适合不需要知道特征之前 的层级关系的时候。
                    
                
                
            
        
浙公网安备 33010602011771号