C# SolidWorks 二次开发 API—各种遍历对象

在实际项目中,我们有时候无法通过一些名字或者信息来查找所要的对象,最快的方式就是通过遍历。然后再去通过细节来找到想要的数据。

  • 遍历图块
       ///这是根据名字来遍历图块的定义
      public static SketchBlockDefinition GetBlockInstenseByBlockName(string blockName)
{

SwApp = ConnectToSolidWorks();

var swModel = (ModelDoc2)SwApp.ActiveDoc;

var skMgr = swModel.SketchManager;

var vBlocks = (object[])skMgr.GetSketchBlockDefinitions();

if (vBlocks == null)
{
return null;
}
else
{
foreach (var item in vBlocks)
{
var blockDef = (SketchBlockDefinition)item;
var fBlock = blockDef.GetFeature();

if (fBlock.Name == blockName)
{
return blockDef;
}
}
}

return null;
}
  • 遍历零件特征
  var swSelMgr = (SelectionMgr)swModel.SelectionManager;
            var swFeat = (Feature)swModel.FirstFeature();
     
            while ((swFeat != null))
            {              
                var swSubFeat = (Feature)swFeat.GetFirstSubFeature();
​
                while ((swSubFeat != null))
                {
                    Debug.Print(swSubFeat.Name.ToString());                    
                    swSubFeat = (Feature)swSubFeat.GetNextSubFeature();
                }
​
                swFeat = (Feature)swFeat.GetNextFeature();
            }
  • 遍历面上的边

   swModel = (ModelDoc2)swApp.ActiveDoc;
           swModelExt = swModel.Extension;
           swSelMgr = (SelectionMgr)swModel.SelectionManager;
           swFeature = (Feature)swSelMgr.GetSelectedObject6(1, -1);
           swModel.ClearSelection2(true);

           nFaceCount = swFeature.GetAffectedFaceCount();
           Debug.Print("Number of faces affected by selected feature = " + nFaceCount);
           vAffectedFaces = (object[])swFeature.GetAffectedFaces();

           for (i = 0; i <= (nFaceCount - 1); i++)
          {
               nEdgeCount = ((Face)vAffectedFaces[i]).GetEdgeCount();
               Debug.Print("   Number of edges on Face " + i + " = " + nEdgeCount);
               vEdges = (object[])((Face)vAffectedFaces[i]).GetEdges();

               for (j = 0; j <= (nEdgeCount - 1); j++)
              {
                  ((Edge)vEdges[j]).Display(2, 0, 0, 1, true);
              }
          }

  • 遍历草图直线

//获取当前草图对象
               var swSketch = (Sketch)swModel.GetActiveSketch2();

               //获取该草图中的所有线
               var vSketchSeg = (object[])swSketch.GetSketchSegments();

               //定义选择
               SelectData swSelData = swSelMgr.CreateSelectData();

               SketchSegment swSketchSeg;
               //遍历线
               for (int i = 0; i < vSketchSeg.Length; i++)
              {
                   swSketchSeg = (SketchSegment)vSketchSeg[i];

                   swSketchSeg.Select4(false, swSelData);
                   
              }

     
  • 遍历草图中的点

var swSketch = (Sketch)swModel.GetActiveSketch2();
            object[] vSketchPt = (object[])swSketch.GetSketchPoints2();
               SketchPoint swSketchPt;
               //遍历点
               for (int i = 0; i < vSketchPt.Length; i++)
              {
                   swSketchPt = (SketchPoint)vSketchPt[i];        
                   
              }
  • 遍历装配中的零件

请参考之前的博文
  • 遍历视图


 var allViewsInThisSheet = (object[])sheet.GetViews();
 
 
  • 遍历视图中的尺寸

   Object[] displayDimensions = (Object[])swView.GetDisplayDimensions();
  • 遍历视图中的注释

var swNote = (Note)swView.GetFirstNote();
 while (swNote != null)
  {
     
       var swAnn = (Annotation)swNote.GetAnnotation();      
       swNote = (Note)swNote.GetNext();
  }
  • 遍历图纸

var sheetNames = (string[])drawingDoc.GetSheetNames();
for (int i = 0; i < sheetNames.Length; i++)
  {
     var bActiveSheet = drawingDoc.ActivateSheet(sheetNames[i]);
  }
  • 遍历视图中形位公差

var swGtol = (Gtol)swView.GetFirstGTOL();

while (swGtol != null)
{
   
    var swAnn = (Annotation)swGtol.GetAnnotation();
       swGtol = (Gtol)swGtol.GetNextGTOL();
}
  • 遍历视图中的表面粗糙度

var swSfSymbol = (SFSymbol)swView.GetFirstSFSymbol();

 while (swSfSymbol != null)
{
   
     var swAnn = (Annotation)swSfSymbol.GetAnnotation();
   
     swSfSymbol = (SFSymbol)swSfSymbol.GetNext();
}
  • 遍历方程式
               //获取当前模型
                ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;
                //定义方程式管理器
                EquationMgr swEqnMgr = default(EquationMgr);
​
                int i = 0;
                int nCount = 0;
​
                if (swModel != null)
                {
                    swEqnMgr = (EquationMgr)swModel.GetEquationMgr();
                     nCount = swEqnMgr.GetCount();
                    for (i = 0; i < nCount; i++)
                    {
                        Debug.Print("  Equation(" + i + ")  = " + swEqnMgr.get_Equation(i));
                        Debug.Print("    Value = " + swEqnMgr.get_Value(i));
                        Debug.Print("    Index = " + swEqnMgr.Status);
                       Debug.Print("    Global variable? " + swEqnMgr.get_GlobalVariable(i));
                    }
​
                    //修改高度为60
​
                }

发表评论

邮箱地址不会被公开。 必填项已用*标注