已經有快一個月沒有更新博客了,一方面是二寶出生了,休了半個月假。再一個就是實在是太忙了。
這篇遍歷的已經計劃很久了,一直在草稿狀態。
在實際項目中,我們有時候無法通過一些名字或者信息來查找所要的對象,最快的方式就是通過遍歷。然後再去通過細節來找到想要的數據。
- 遍歷圖塊
///這是根據名字來遍歷圖塊的定義
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
}
- 遍歷球標
- 遍歷屬性