您的位置:首页 > 其它

SolidWorks二次开发-获取工程图中注解的信息

2018-01-08 13:44 302 查看
实现功能:





获取工程图中注解信息,如上图。

VBA:

Dim swApp As SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2

Dim swModelDocExt As SldWorks.ModelDocExtension

Dim swSelMgr As SldWorks.SelectionMgr

Dim selGtol As SldWorks.Gtol

Dim boolstatus As Boolean

Dim idx As Integer

Dim params As Variant

----------

Sub main()

Dim swAnn As SldWorks.Annotation
Dim swDraw As SldWorks.DrawingDoc
Dim selGtol  As SldWorks.Gtol
Dim swView    As SldWorks.View
Dim swDispDim  As SldWorks.DisplayDimension
Dim swDim   As SldWorks.Dimension
Dim objDim As Variant
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
'Set swSelMgr = swModel.SelectionManager
'Set selGtol = swSelMgr.GetSelectedObject6(1, 0)   '获取被选中的注解信息时可使用
'Debug.Print "GetTextCount = " & CStr(selGtol.GetTextCount)  ’个数

Set swDraw = swModel

Set swView = swDraw.GetFirstView

Do While Not Nothing Is swView

Set swAnn = swView.GetFirstAnnotation3

Do While Not Nothing Is swAnn

If swAnn.GetType = swGTol Then '形位公差的获取

Set selGtol = swAnn.GetSpecificAnnotation

For idx = 0 To selGtol.GetTextCou
4000
nt - 1

Debug.Print "GetTextAtIndex(" + CStr(idx) + ") = " + selGtol.GetTextAtIndex(idx)

Next idx
Debug.Print "    "

ElseIf swAnn.GetType = swDisplayDimension Then '尺寸公差

Set swDispDim = swAnn.GetSpecificAnnotation
Set swDim = swDispDim.GetDimension

If InStr(swDispDim.GetText(swDimensionTextParts_e.swDimensionTextPrefix), "<C#-") Then '尺寸前缀包含圆圈编号

Debug.Print swDispDim.GetText(swDimensionTextParts_e.swDimensionTextPrefix)
Debug.Print " Value= " & swDim.GetSystemValue2("") * 1000

objDim = swDim.GetToleranceValues()

Debug.Print "上偏差:"; objDim(1) * 100
Debug.Print "下偏差:"; objDim(0) * 100

End If

End If

Set swAnn = swAnn.GetNext3

Loop

Set swView = swView.GetNextView

Loop

End Sub


c#



class GetDrwInfo
{
ISldWorks swApp;
//IModelDoc2 swModel;
IDrawingDoc swDraw;
SolidWorks.Interop.sldworks.View swView;
public GetDrwInfo(ISldWorks iSwApp, IModelDoc2 iSwModel)
{
swApp = iSwApp;
swDraw = (IDrawingDoc)iSwModel;
}
public void GetNoteInfo()
{
//形位公差
Gtol swGTol ;
DisplayDimension swDispDim;
Dimension swDim;
swView = swDraw.GetFirstView();
while (swView != null)
{
Annotation swAnn = swView.GetFirstAnnotation2();
while (swAnn != null)
{
if (swAnn.GetType() == (int)swAnnotationType_e.swGTol) //形位公差
{
swGTol = swAnn.GetSpecificAnnotation();

for (int idx = 0; idx < swGTol.GetTextCount(); idx++)
{
MessageBox.Show("形位公差 GetTextAtIndex(" + idx.ToString() + ") = " + swGTol.GetTextAtIndex(idx));
}

}
else if (swAnn.GetType() == (int)swAnnotationType_e.swDisplayDimension) //尺寸
{
swDispDim = swAnn.GetSpecificAnnotation();
swDim = swDispDim.GetDimension();
if (swDispDim.GetText((int)swDimensionTextParts_e.swDimensionTextPrefix).Contains("<C#-"))    //如果前面有编号
{
MessageBox.Show(swDispDim.GetText((int)swDimensionTextParts_e.swDimensionTextPrefix));
MessageBox.Show("尺寸 Value= " + swDim.GetSystemValue2("") * 1000);
object objDim = null;
objDim = swDim.GetToleranceValues();
double[] dim = (double[])objDim;
double upValue = dim[0] * 100;
double downValue = dim[1] * 100;
MessageBox.Show("上偏差:" + upValue.ToString());
MessageBox.Show("下偏差:" + downValue.ToString());
}
}
swAnn = swAnn.GetNext3();
}
swView = swView.GetNextView();
}
}
}


“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: