用.Net开发CAD一般都需要添加引用CAD的库文件,但是由于不同版本的CAD,其库文件也有很多的差别。为了避免由于版本不同而引起各种问题,特别是要求软件使用者的CAD版本与软件开发者的CAD版本一致,这种要求比较苛刻,在现实生活中也很难实现,在此介绍一种方法。下面以在CAD中绘制线、坐标、输入文字等几种常用的操作为例: 3)添加一个按钮控件,该控件用于完成在CAD中操作,设计该按钮实现以下几个功能: (1)启动CAD对象; (2)保存CAD文件; (3)在CAD文件中绘制一条根据数组数据得到的PolyLine线; (4)在CAD文件中绘制坐标X轴、Y轴及它们的箭头; (5)在CAD文件中输入文字。 Public Class Form1 Public x() As Double Public y() As Double Public count As Integer '其中x,y为PolyLine线的x和y坐标数组,count为PolyLine线上节点的个数,即x、y数组的长度。 '为该按钮添加程序代码如下: 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") '如果CAD已经运行,则返回对CAD应用程序对象的引用,否则发生一个错误 If Err.Number Then '如果Err.Number非零(为真) Err.Clear() AcadApp = CreateObject("AutoCAD.Application") If Err.Number Then MsgBox(Err.Description) Exit Sub End If End If
'AcadApp.Visible = True '设置界面可视 'AcadApp.WindowState = AutoCAD.AcWindowState.acMax '设置界面最大化 'AppActivate(AcadApp.Caption) '显示AutoCAD界面
''--------------------------------- ''当AcadApp 不再使用时,应该使用 AcadApp=Nothing 来释放占用的内存资源 ''--------------------------------- Dim dg As New SaveFileDialog dg.Filter = "CAD文件(*.dwg)*.dwg" dg.ShowDialog() Dim savePathname As String savePathname = dg.FileName '==================================================================== x = {0, 100, 200, 300} y = {0, 50, 0, 50} count = 4 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 End Class
运行程序,点击按钮即保存了一个CAD图形文件。
但是这种方式只适合在本版本的CAD中使用,对于不是这个版本的CAD将无法使用。如现在使用的是AutoCAD 2004开发的,如果用户使用的是非2004版本的,他就无法使用这个程序。为了使这种开发变得通用,只需要将程序中凡是属于CAD对象的类名称全部更改为Object,使用模糊识别的方式。如将AutoCAD.AcadApplication更改为Object,则该程序就可以在AutoCAD其它版本中使用,包括其它对象也是一样。现将按钮Click事件中代码的代码AutoCAD.AcadApplication更改为Object,运行程序,同样可以实现相同的功能,而且还可以在AutoCAD其它版本中使用,如在AutoCAD 2007中就可以使用. |
|