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

适合任何CAD版本的CAD开发

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




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图形文件,如下图所示:




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




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

posted @ 2011-11-14 19:24  Cad人生  阅读(4256)  评论(0编辑  收藏  举报