适合任何CAD版本的CAD开发技巧

适合任何CAD版本的CAD开发

.Net开发CAD一般都需要添加引用CAD的库文件,但是由于不同版本的CAD,其库文件也有很多的差别。为了避免由于版本不同而引起各种问题,特别是要求软件使用者的CAD版本与软件开发者的CAD版本一致,这种要求比较苛刻,在现实生活中也很难实现,在此介绍一种方法。下面以在CAD中绘制线、坐标、输入文字等几种常用的操作为例:
1)启动Visual Studio,选择一个开发环境,在此以Visual Basic.net开发为例。
2)添加引用您的CAD库,如AutoCAD 2004版本的库,如下图所示:
适合任何CAD版本的CAD开发技巧



3)添加一个按钮控件,该控件用于完成在CAD中操作,设计该按钮实现以下几个功能:(1)启动CAD对象;(2)保存CAD文件;(3)在CAD文件中绘制一条根据数组数据得到的PolyLine线;(4)在CAD文件中绘制坐标X轴、Y轴及它们的箭头;(5)在CAD文件中输入文字。
4)在全局变量中定义用于PolyLine线的数据数组,如下:
Public x() As Double
Public y() As Double
Public count As Integer
其中x,y为PolyLine线的xy坐标数组,countPolyLine线上节点的个数,即xy数组的长度。
为该按钮添加程序代码如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
On Error GoTo handle01
Dim AcadApp As AutoCAD.AcadApplication
On Error Resume Next
AcadApp = GetObject(, "AutoCAD.Application")
If Err.Number Then
Err.Clear()
AcadApp = CreateObject("AutoCAD.Application")

End If

Dim dg As New SaveFileDialog
dg.Filter = "CAD文件(*.dwg)|*.dwg"
dg.ShowDialog()
Dim savePathname As String
savePathname = dg.FileName

'====================================================================
Dim i As Integer
Dim points(2 * (count - 1) + 1) As Double
For i = 0 To count - 1
points(i * 2) = x(i)
points(i * 2 + 1) = y(i)
Next

Dim Ymax As Double = y(0)
For i = 0 To count - 1
If Ymax < y(i) Then
Ymax = y(i)
End If
Next

AcadApp.ActiveDocument.ModelSpace.AddLightWeightPolyline(points)

'绘制X轴
Dim pointsXAxis(3), XAxisTextCord(2), XAxisArrowCord(5) As Double
pointsXAxis(0) = 0 : pointsXAxis(1) = 0
pointsXAxis(2) = x(count - 1) + 10 : pointsXAxis(3) = 0
XAxisTextCord(0) = pointsXAxis(2) : XAxisTextCord(1) = pointsXAxis(3)
XAxisArrowCord(0) = x(count - 1) : XAxisArrowCord(1) = 5
XAxisArrowCord(2) = x(count - 1) + 10 : XAxisArrowCord(3) = 0
XAxisArrowCord(4) = x(count - 1) : XAxisArrowCord(5) = -5
AcadApp.ActiveDocument.ModelSpace.AddLightWeightPolyline(pointsXAxis)
AcadApp.ActiveDocument.ModelSpace.AddText("距离", XAxisTextCord, 6)
AcadApp.ActiveDocument.ModelSpace.AddLightWeightPolyline(XAxisArrowCord)

'绘制Y轴
Dim pointsYAxis(3), YAxisTextCord(2), YAxisArrowCord(5) As Double
pointsYAxis(0) = 0 : pointsYAxis(1) = 0
pointsYAxis(2) = 0 : pointsYAxis(3) = Ymax + 20
YAxisTextCord(0) = pointsYAxis(2) : YAxisTextCord(1) = Ymax + 20
YAxisArrowCord(0) = -5 : YAxisArrowCord(1) = Ymax + 10
YAxisArrowCord(2) = 0 : YAxisArrowCord(3) = Ymax + 20
YAxisArrowCord(4) = 5 : YAxisArrowCord(5) = Ymax + 10
AcadApp.ActiveDocument.ModelSpace.AddLightWeightPolyline(pointsYAxis)
AcadApp.ActiveDocument.ModelSpace.AddText("高程", YAxisTextCord, 6)
AcadApp.ActiveDocument.ModelSpace.AddLightWeightPolyline(YAxisArrowCord)

'绘制原点
Dim XYAxisTextCord(2) As Double
XYAxisTextCord(0) = -10 : XYAxisTextCord(1) = -10
AcadApp.ActiveDocument.ModelSpace.AddText("0,0", XYAxisTextCord, 6)
'====================================================================

AcadApp.ActiveDocument.SaveAs(savePathname)
AcadApp.Quit()
MsgBox("保存CAD文件成功!")
Exit Sub
handle01:
MsgBox(Err.Description)
End Sub
运行程序,点击按钮即保存了一个CAD图形文件,如下图所示:
适合任何CAD版本的CAD开发技巧



由于没有为xycount赋值,所以图中没有出现Polyline线。但是这种方式只适合在本版本的CAD中使用,对于不是这个版本的CAD将无法使用。如现在使用的是AutoCAD 2004开发的,如果用户使用的是非2004版本的,他就无法使用这个程序。为了使这种开发变得通用,只需要将程序中凡是属于CAD对象的类名称全部更改为Object,使用模糊识别的方式。如将AutoCAD.AcadApplication更改为Object,则该程序就可以在AutoCAD其它版本中使用,包括其它对象也是一样。现将按钮Click事件中代码的代码AutoCAD.AcadApplication更改为Object,运行程序,同样可以实现相同的功能,而且还可以在AutoCAD其它版本中使用,如在AutoCAD 2007中就可以使用,如下图所示:
适合任何CAD版本的CAD开发技巧



此外,在CAD开发中经常要来猜对象里面的结构,如3DPolyline的具有哪些属性?如何创建它?如何设置它的高程值?如何对它进行复制、删除等编辑操作?如果不去查专业的开发帮助文档,可能很难知道它里面的结构。在编程中,可以先定义一个3DPolyline的对象,如Dim p1 As AutoCAD.Acad3DPolyline,然后通过p1的属性或方法提示就可以知道它具有哪些属性和方法,如获取第一个点的Y值坐标为p1.Coordinate(0)(1),在对它实例化时只需要将是Acad3DPolyline类型的对象赋予给p1即可。当要这个程序通用时,就将AutoCAD.Acad3DPolyline改为Object即可。