今天要讲的文章接着上一篇讲,第三种获取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)循环一起使用,才可以获取到所有的节点。
今天这篇文章就介绍这么多,我们下篇文章再见。