如下圖所示,在Solidworks的草圖中继榆,一個草圖可以由多個草圖段構成,如直線猛计,圓弧,樣條曲線爆捞,文字等奉瘤,都屬于草圖段的細分分類。在Solidworks中SketchSegment對象代表草圖段對象煮甥。如下圖盗温,圓弧,直線等對象苛秕,可以理解為是SketchSegment的子類肌访。從這里可以理解SketchSegment存儲的是一些草圖的通用信息找默,而子類存儲的是具體草圖段的特殊信息艇劫。
本文就通過實例講解下草圖段對象。
實例分析:
如下圖惩激,本例中店煞,我們將遍歷草圖中的所有草圖段。
實例代碼
#region 遍歷所有草圖片段
public static void GetAllSketchSegment(ModelDoc2 SwDoc)
{
Feature SketchFeat = ((PartDoc)SwDoc).FeatureByName("草圖片段研究");
Sketch SwSketch = SketchFeat.GetSpecificFeature2();
object[] ObjSegs = SwSketch.GetSketchSegments();
foreach (object ObjSeg in ObjSegs)
{
SketchSegment SwSeg = (SketchSegment)ObjSeg;
SwSeg.Select(false);
string ObjStatus = "";
if ((swSketchSegments_e)SwSeg.GetType() == swSketchSegments_e.swSketchLINE)
{
SketchLine SwSketchLine = (SketchLine)SwSeg;
if (SwSketchLine != null)
{
ObjStatus = "對象得到成功";
}
else
{
ObjStatus = "對象得到失敗";
}
}
else if ((swSketchSegments_e)SwSeg.GetType() == swSketchSegments_e.swSketchARC)
{
SketchArc SwSketchARC = (SketchArc)SwSeg;
if (SwSketchARC != null)
{
ObjStatus = "對象得到成功";
}
else
{
ObjStatus = "對象得到失敗";
}
}
else if ((swSketchSegments_e)SwSeg.GetType() == swSketchSegments_e.swSketchELLIPSE)
{
SketchEllipse SwSketchEllipse = (SketchEllipse)SwSeg;
if (SwSketchEllipse != null)
{
ObjStatus = "對象得到成功";
}
else
{
ObjStatus = "對象得到失敗";
}
}
else if ((swSketchSegments_e)SwSeg.GetType() == swSketchSegments_e.swSketchSPLINE)//樣條曲線
{
SketchSpline SwSketchSpline = (SketchSpline)SwSeg;
if (SwSketchSpline != null)
{
ObjStatus = "對象得到成功";
}
else
{
ObjStatus = "對象得到失敗";
}
}
else if ((swSketchSegments_e)SwSeg.GetType() == swSketchSegments_e.swSketchTEXT)
{
SketchText SwSketchText = (SketchText)SwSeg;
if (SwSketchText != null)
{
ObjStatus = "對象得到成功";
}
else
{
ObjStatus = "對象得到失敗";
}
}
StringBuilder Sb = new StringBuilder("");
Sb.Append(((swSketchSegments_e)SwSeg.GetType()).ToString().Trim() + ObjStatus + "\r\n");
Sb.Append("名稱:" + SwSeg.GetName() + "\r\n");
Sb.Append("ID:" + SwSeg.GetID()[0] + "," + SwSeg.GetID()[1] + "\r\n");//比如各類草圖都有一個相同的ID
Sb.Append("長度:" + SwSeg.GetLength() + "\r\n");
System.Windows.MessageBox.Show(Sb.ToString().Trim());
//特定草圖中的每個圖元都有一個唯一的 ID风钻。但是顷蟀,草圖線可能與同一草圖中的草繪弧具有相同的 ID 值。同樣骡技,在第二個草圖中鸣个,您可能會找到具有相同 ID 的不同草圖元素羞反,因此,您的應用程序必須跟蹤
}
}
#endregion
運行效果如下:
實例分析
1.從實例效果可以看出囤萤,我們可以通過SketchSegment對象得到各細分對象昼窗。
2.SketchSegment作為通用對象,包含了各類草圖段的通用信息涛舍,如長度澄惊,ID等等。
3.每個草圖段都有ID富雅,這個ID是一個二維數組掸驱,但我們看到好幾個草圖段的ID都是【0,1】,這里Solidworks的原理是一個草圖中没佑,相同類型的草圖段的ID是唯一的毕贼。故我們雖然看到很多ID是【0,1】,但這些草圖段分別屬于不同的草圖段類型蛤奢,如直線帅刀,圓弧,橢圓远剩,等等扣溺。
如下圖為本文的示例程序,源碼可上我的Github下載瓜晤。