博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AutoCAD利用VB交互创建应用程序交互
阅读量:5793 次
发布时间:2019-06-18

本文共 3032 字,大约阅读时间需要 10 分钟。

可以使用COM技术,在VB中直接操作AutoCAD,创建于VBA功能类似的程序,VB能够直接打包生成安装文件,这种形式比VBA更加方便,并且更容易保护自己的程序。VB连接到AutoCAD主要用到CreateObject和GetObject函数,创建或者获得对ActiveX对象的引用。

连接到AutoCAD之后,就可以使用acadApp对象对AutoCAD进行操作,语法和操作方法与VBA完全一致。

下面这段代码创建一个绘制楼梯剖面图的程序。

Dim bcal As Boolean

Dim ptarr1() As Double
Dim ptarr2(19) As Double
Private Sub cmdcal_Click()
    Dim objcontrol As Control
    For Each objcontrol In Form1.Controls
        If TypeOf objcontrol Is TextBox Then
            If objcontrol.Text = "" Then
                MsgBox "缺少参数,无法计算!", vbCritical
                Exit Sub
            End If
        End If
    Next
    Dim x0 As Double, y0 As Double
    Dim s As Double, t As Double, n As Double
    Dim b As Double, h As Double, h0 As Double
    x0 = txtptx.Text: y0 = txtpty.Text
    s = txtsteph.Text: t = txtstepw.Text: n = txtstepnum.Text
    b = txtgriderw.Text: h = txtgriderh.Text: h0 = txtboardt.Text
    If h0 >= h Or b > 80 Or s >= t Then
        MsgBox "输入条件不符合要求,请检查参数的合理性!", vbCritical
        Exit Sub
    End If
    ReDim ptarr1(2 * (2 * n + 2) - 1)
    ptarr1(0) = x0 - 100: ptarr1(1) = y0
    ptarr1(2) = x0: ptarr1(3) = y0
    ptarr1(4) = x0: ptarr1(5) = y0 + s
    Dim i As Integer
    For i = 6 To 2 * (2 * n + 2) - 3
        If i Mod 4 = 2 Then
            ptarr1(i) = ptarr1(i - 4) + t
        ElseIf i Mod 4 = 3 Then
            ptarr1(i) = ptarr1(i - 4) + s
        ElseIf i Mod 4 = 0 Then
            ptarr1(i) = ptarr1(i - 2)
        ElseIf i Mod 4 = 1 Then
            ptarr1(i) = ptarr1(i - 2) + s
        End If
    Next i
    ptarr1(2 * (2 * n + 2) - 2) = ptarr1(2 * (2 * n + 2) - 4) + 100
    ptarr1(2 * (2 * n + 2) - 1) = ptarr1(2 * (2 * n + 2) - 3)
    ptarr2(0) = x0 - 100: ptarr2(1) = y0 - h0
    ptarr2(2) = x0 - b: ptarr2(3) = y0 - h0
    ptarr2(4) = x0 - b: ptarr2(5) = y0 - h
    ptarr2(6) = x0: ptarr2(7) = y0 - h
    ptarr2(8) = x0: ptarr2(9) = y0 - h0
    ptarr2(10) = x0 + (n - 1) * t: ptarr2(11) = y0 + (n - 1) * s - h0
    ptarr2(12) = ptarr1(2 * (2 * n + 2) - 4): ptarr2(13) = ptarr1(2 * (2 * n + 2) - 3) - h
    ptarr2(14) = ptarr2(12) + b: ptarr2(15) = ptarr2(13)
    ptarr2(16) = ptarr2(14): ptarr2(17) = ptarr2(15) + (h - h0)
    ptarr2(18) = ptarr1(2 * (2 * n + 2) - 2): ptarr2(19) = ptarr1(2 * (2 * n + 2) - 1) - h0
    bcal = True
End Sub
Private Sub cmddraw_Click()
    If bcal = False Then
        MsgBox "请先进行计算,再进行绘图!", vbCritical
        Exit Sub
    End If
    On Error Resume Next
    Dim acadapp As AcadApplication
    Set acadapp = GetObject(, "AutoCAD.Application.16")
    If Err Then
        Err.Clear
        'MsgBox "sssssssssssss"
        'Set acadapp = CreatObject("AutoCAD.Application.16")
        If Err Then
            MsgBox Err.Description
            Exit Sub
        End If
    End If
    Dim acaddoc As AcadDocument
    Set acaddoc = acadapp.ActiveDocument
    acaddoc.ModelSpace.AddLightWeightPolyline ptarr1
    acaddoc.ModelSpace.AddLightWeightPolyline ptarr2
    ZoomAll
    acadapp.Visible = True
    bcal = False
End Sub
Private Sub cmdexit_Click()
    End
End Sub
Private Sub Form_Load()
    txtptx.Text = 0
    txtpty.Text = 0
    txtptz.Text = 0
    txtsteph.Text = 20
    txtstepw.Text = 40
    txtstepnum.Text = 10
    txtgriderw.Text = 25
    txtgriderh.Text = 45
    txtboardt.Text = 15
    bcal = False
End Sub

因为VB和AutoCAD之间是通过COM技术连接,这种数据交换对系统资源的消耗很大,同样的计算在VB运算消耗的时间比在VBA中的运算时间要多5倍以上,在VB中按F5键运行程序,可以在Form中对楼梯参数进行设置,就可在CAD中绘制楼梯剖面图。创建VB程序时要尽可能减少程序和AutoCAD之间的数据交换,所有计算尽量在VB中完成,直接传递给AutoCAD计算结果,使CAD可以直接根据结果进行绘图。在VB中按下F5键,单击绘图按钮即可在CAD中看到绘制的楼梯剖面图。

转载地址:http://qjffx.baihongyu.com/

你可能感兴趣的文章
jsp页面修改后浏览器中不生效
查看>>
大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(四)高效的后台权限判断处理...
查看>>
信号量实现进程同步
查看>>
Spring4-自动装配Beans-通过构造函数参数的数据类型按属性自动装配Bean
查看>>
win10.64位wnmp-nginx1.14.0 + PHP 5. 6.36 + MySQL 5.5.59 环境配置搭建 结合Thinkphp3.2.3
查看>>
如何查看python selenium的api
查看>>
Python_Mix*random模块,time模块,sys模块,os模块
查看>>
iframe刷新问题
查看>>
数据解码互联网行业职位
查看>>
我所见的讲的最容易理解,逻辑最强的五层网络模型,来自大神阮一峰
查看>>
js实现复选框的操作-------Day41
查看>>
chrome浏览器开发者工具之同步修改至本地
查看>>
debian7 + wheezy + chromium + flashplayer
查看>>
AOP
查看>>
进阶开发——文档,缓存,ip限速
查看>>
vue中子组件需调用父组件通过异步获取的数据
查看>>
uva 11468 - Substring(AC自己主动机+概率)
查看>>
Mysql 数据备份与恢复,用户创建,授权
查看>>
Angular.js中的$injector服务
查看>>
构建之法读书笔记01
查看>>