C# Solidworks二次开发:三种获取SW设计结构树的方法-第三讲
2023-12-15 17:35:42
今天要讲的文章接着上一篇讲,第三种获取SW设计结构树的方法。
这个方法的逻辑是通过先获取第一个特征,然后通过循环不断的寻找下一个特征来完成获取所有节点。
1、获取第一个特征的API如下所示:FirstFeature Method (IModelDoc2)
这个API的方法解释为:获取文档中的第一个特性。
返回值的类型为Feature。
使用的例子如下所示:
? ModelDoc2?swModel?=?default(ModelDoc2); ????????????ModelView?swModelView?=?default(ModelView); ????????????PartDoc?swPart?=?default(PartDoc); ????????????AssemblyDoc?swAssy?=?default(AssemblyDoc); ????????????FeatureManager?swFeatMgr?=?default(FeatureManager); ????????????Feature?swFeat?=?default(Feature); ????????????object[]?featFace?=?null; ????????????Face2?swFace?=?default(Face2); ????????????object?rect?=?null; ????????????string?featureName?=?null; ????????????ArrayList?featName?=?new?ArrayList(); ????????????string?nameString; ????????????int?docType?=?0; ????????????int?i?=?0; ????????????int?j?=?0; ????????????bool?status?=?false; ????????????swModel?=?(ModelDoc2)swApp.ActiveDoc; ????????????swModelView?=?(ModelView)swModel.ActiveView; ????????????rect?=?null; ????????????swFeatMgr?=?(FeatureManager)swModel.FeatureManager; ????????????swFeat?=?(Feature)swModel.FirstFeature(); ????????????docType?=?swModel.GetType(); ????????????switch?(docType) ????????????{ ????????????????case?(int)swDocumentTypes_e.swDocPART: ????????????????????swPart?=?(PartDoc)swModel; ????????????????????break; ????????????????case?(int)swDocumentTypes_e.swDocASSEMBLY: ????????????????????swAssy?=?(AssemblyDoc)swModel; ????????????????????break; ????????????????default: ????????????????????Debug.Print("Open?a?part?or?assembly?document,?then?rerun?this?macro."); ????????????????????break; ????????????} ????????????while?((swFeat?!=?null)) ????????????{ ????????????????featureName?=?swFeat.Name; ????????????????featName.Add(featureName); ????????????????swFeat?=?(Feature)swFeat.GetNextFeature(); ????????????}
2、获取下一个特征的API为:GetNextFeature Method (IFeature)
这个API的解释为:获取部件中的下一个特性。
使用的例子如下所示:
? public?void?TraverseFeatureFeatures(Feature?swFeat,?long?nLevel) ????????{ ????????????Feature?swSubFeat; ????????????Feature?swSubSubFeat; ????????????Feature?swSubSubSubFeat; ????????????string?sPadStr?=?"?"; ????????????long?i?=?0; ????????????for?(i?=?0;?i?<=?nLevel;?i++) ????????????{ ????????????????sPadStr?=?sPadStr?+?"?"; ????????????} ????????????while?((swFeat?!=?null)) ????????????{ ????????????????Debug.Print(sPadStr?+?swFeat.Name?+?"?["?+?swFeat.GetTypeName2()?+?"]"); ????????????????swSubFeat?=?(Feature)swFeat.GetFirstSubFeature(); ????????????????while?((swSubFeat?!=?null)) ????????????????{ ????????????????????Debug.Print(sPadStr?+?"??"?+?swSubFeat.Name?+?"?["?+?swSubFeat.GetTypeName()?+?"]"); ????????????????????swSubSubFeat?=?(Feature)swSubFeat.GetFirstSubFeature(); ????????????????????while?((swSubSubFeat?!=?null)) ????????????????????{ ????????????????????????Debug.Print(sPadStr?+?"????"?+?swSubSubFeat.Name?+?"?["?+?swSubSubFeat.GetTypeName()?+?"]"); ????????????????????????swSubSubSubFeat?=?(Feature)swSubSubFeat.GetFirstSubFeature(); ????????????????????????while?((swSubSubSubFeat?!=?null)) ????????????????????????{ ????????????????????????????Debug.Print(sPadStr?+?"??????"?+?swSubSubSubFeat.Name?+?"?["?+?swSubSubSubFeat.GetTypeName()?+?"]"); ????????????????????????????swSubSubSubFeat?=?(Feature)swSubSubSubFeat.GetNextSubFeature(); ????????????????????????} ????????????????????????swSubSubFeat?=?(Feature)swSubSubFeat.GetNextSubFeature(); ????????????????????} ????????????????????swSubFeat?=?(Feature)swSubFeat.GetNextSubFeature(); ????????????????} ????????????????swFeat?=?(Feature)swFeat.GetNextFeature(); ????????????} ????????}
上面的这两个例子只是说怎么用,具体这两个API的配合使用逻辑是要结合? while (feature != null)循环一起使用,才可以获取到所有的节点。
今天这篇文章就介绍这么多,我们下篇文章再见。
文章来源:https://blog.csdn.net/m0_53104033/article/details/134885133
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!