在Solidworks工程圖中,除視圖以外女蜈,大多數(shù)的元素持舆,如文本,尺寸伪窖,件號逸寓,粗糙度等都屬于Annotation注解大類,即下圖中的紅框工具覆山。文本竹伸,尺寸,件號簇宽,粗糙度對象都是注解對象的細(xì)分勋篓。本文我們先初步介紹下Annotation對象。
實例1:獲得注解對象信息
如下圖所示晦毙,視圖中的元素均屬于注解對象生巡,包括尺寸,注釋见妒,件號孤荣,粗糙度,形位公差须揣,基準(zhǔn)盐股,中心線,修訂云耻卡。本例先得到這些注解對象的基本信息疯汁。
實例代碼:
public static void GetAllAnnotationInView(ModelDoc2 SwDoc,string ViewName)
{
//注解,件號卵酪,尺寸幌蚊,表面粗糙度谤碳,中心符號,焊接符號,公差,基準(zhǔn)
View SwView = ((Feature)((DrawingDoc)SwDoc).FeatureByName(ViewName)).GetSpecificFeature2();
object[] ObjAnnos = SwView.GetAnnotations();
int i = 1;
foreach (object ObjAnno in ObjAnnos)
{
StringBuilder Sb = new StringBuilder("");
Sb.Append("注解"+i.ToString().Trim()+"\r\n");
Annotation SwAnnn = (Annotation)ObjAnno;
Sb.Append("類型="+((swAnnotationType_e)SwAnnn.GetType()).ToString().Trim()+"\r\n");
Sb.Append("所屬=" + ((swAnnotationOwner_e)SwAnnn.OwnerType).ToString().Trim() + "\r\n");
double[] pos = SwAnnn.GetPosition();
Sb.Append("坐標(biāo)=(" + pos[0].ToString().Trim()+","+ pos[1].ToString().Trim() + ")\r\n");
bool sc = SwAnnn.SetName((i).ToString().Trim());
Sb.Append("名稱設(shè)置結(jié)果=" + sc.ToString().Trim() + "\r\n");
Sb.Append("名稱=" + SwAnnn.GetName() + "\r\n");
SwAnnn.Select(false);//選中溢豆,直觀顯示該對象
System.Windows.Forms.MessageBox.Show(Sb.ToString().Trim());
i++;
}
}
運行效果:
實例分析:
我們可以通過如下方式獲得Annotation對象
可以通過Annotation的屬性或方法蜒简,實現(xiàn)對注解的如下常用操作
實例2:獲得注解細(xì)分對象
注解一些通用的特性會由Annotation對象的方法或?qū)傩詫崿F(xiàn),各細(xì)分種類特有的特性將由各細(xì)分對象的屬性或方法實現(xiàn)漩仙。本例將獲得這些細(xì)分對象搓茬,如Note,SFSymbol队他,DisplayDimension等各類對象卷仑,這些對象的屬性方法可進一步操作各自特性的功能。
實例代碼:
public static void GetAllAnnotationObjectInView(ModelDoc2 SwDoc, string ViewName)
{
View SwView = ((Feature)((DrawingDoc)SwDoc).FeatureByName(ViewName)).GetSpecificFeature2();
Annotation SwAnnn = SwView.GetFirstAnnotation3();
while (SwAnnn != null)
{
if (SwAnnn.GetType() == (int)swAnnotationType_e.swSFSymbol)//粗糙度
{
SFSymbol SwSFSymbol= SwAnnn.GetSpecificAnnotation(); ;
if (SwSFSymbol != null)
{
((Annotation)SwSFSymbol.GetAnnotation()).Select(false);//通過Ann對象使用選擇功能
System.Windows.Forms.MessageBox.Show("選中對象【粗糙度】已獲得");
}
}
else if (SwAnnn.GetType() == (int)swAnnotationType_e.swNote)//注釋和件號都算這部分
{
Note SwNote = SwAnnn.GetSpecificAnnotation();
if (SwNote != null)
{
((Annotation)SwNote.GetAnnotation()).Select(false);
System.Windows.Forms.MessageBox.Show("選中對象【注釋】已獲得");
}
}
else if (SwAnnn.GetType() == (int)swAnnotationType_e.swDisplayDimension)
{
DisplayDimension SwDispDim = SwAnnn.GetSpecificAnnotation();
if (SwDispDim != null)
{
((Annotation)SwDispDim.GetAnnotation()).Select(false);
System.Windows.Forms.MessageBox.Show("選中對象【尺寸】已獲得");
}
}
else if (SwAnnn.GetType() == (int)swAnnotationType_e.swCenterMarkSym)
{
CenterMark SwCenterMark = SwAnnn.GetSpecificAnnotation();
if (SwCenterMark != null)
{
((Annotation)SwCenterMark.GetAnnotation()).Select(false);
System.Windows.Forms.MessageBox.Show("選中對象【中心符號】已獲得");
}
}
else if (SwAnnn.GetType() == (int)swAnnotationType_e.swWeldSymbol)//焊接符號
{
WeldSymbol SwWeldSymbol = SwAnnn.GetSpecificAnnotation();
if (SwWeldSymbol != null)
{
((Annotation)SwWeldSymbol.GetAnnotation()).Select(false);
System.Windows.Forms.MessageBox.Show("選中對象【焊接符號】已獲得");
}
}
else if (SwAnnn.GetType() == (int)swAnnotationType_e.swGTol)//形位公差
{
Gtol SwGtol= SwAnnn.GetSpecificAnnotation();
if (SwGtol != null)
{
((Annotation)SwGtol.GetAnnotation()).Select(false);
System.Windows.Forms.MessageBox.Show("選中對象【形位公差】已獲得");
}
}
else if (SwAnnn.GetType() == (int)swAnnotationType_e.swDatumTargetSym)//基準(zhǔn)
{
DatumTargetSym SwDatumTargetSym = SwAnnn.GetSpecificAnnotation();
if (SwDatumTargetSym != null)
{
((Annotation)SwDatumTargetSym.GetAnnotation()).Select(false);
System.Windows.Forms.MessageBox.Show("選中對象【基準(zhǔn)】已獲得");
}
}
else if (SwAnnn.GetType() == (int)swAnnotationType_e.swRevisionCloud)//修訂云
{
RevisionCloud SwRevisionCloud = SwAnnn.GetSpecificAnnotation();
if (SwRevisionCloud != null)
{
((Annotation)SwRevisionCloud.GetAnnotation()).Select(false);
System.Windows.Forms.MessageBox.Show("選中對象【修訂云】已獲得");
}
}
SwAnnn= SwAnnn.GetNext3();
}
}
運行效果:
實例分析:
首先我們可以通過Annotation::GetType方法,判斷注解的細(xì)分對象類型麸折,然后通過Annotation::GetSpecificAnnotation方法得到對應(yīng)的細(xì)分對象锡凝,從而使用細(xì)分對象的屬性或方法進一步自動操作對應(yīng)的注解。
如下圖為本文的示例程序磕谅,源碼可上我的Github下載私爷。操作步驟可見文章[《公眾號源碼Github分享庫》], 實例序號25