在Solidworks工程图中,除视图以外,大多数的元素,如文本,尺寸,件号,粗糙度等都属于Annotation注解大类,即下图中的红框工具。文本,尺寸,件号,粗糙度对象都是注解对象的细分。本文我们先初步介绍下Annotation对象。
实例1:获得注解对象信息
如下图所示,视图中的元素均属于注解对象,包括尺寸,注释,件号,粗糙度,形位公差,基准,中心线,修订云。本例先得到这些注解对象的基本信息。
实例代码:
public static void GetAllAnnotationInView(ModelDoc2 SwDoc,string ViewName)
{
//注解,件号,尺寸,表面粗糙度,中心符号,焊接符号,公差,基准
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("坐标=(" + pos[0].ToString().Trim()+","+ pos[1].ToString().Trim() + ")\r\n");
bool sc = SwAnnn.SetName((i).ToString().Trim());
Sb.Append("名称设置结果=" + 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的属性或方法,实现对注解的如下常用操作
实例2:获得注解细分对象
注解一些通用的特性会由Annotation对象的方法或属性实现,各细分种类特有的特性将由各细分对象的属性或方法实现。本例将获得这些细分对象,如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)//基准
{
DatumTargetSym SwDatumTargetSym = SwAnnn.GetSpecificAnnotation();
if (SwDatumTargetSym != null)
{
((Annotation)SwDatumTargetSym.GetAnnotation()).Select(false);
System.Windows.Forms.MessageBox.Show("选中对象【基准】已获得");
}
}
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方法,判断注解的细分对象类型,然后通过Annotation::GetSpecificAnnotation方法得到对应的细分对象,从而使用细分对象的属性或方法进一步自动操作对应的注解。
如下图为本文的示例程序,源码可上我的Github下载。操作步骤可见文章[《公众号源码Github分享库》], 实例序号25