土木在线论坛 \ 建筑设计 \ CAD下载及教程 \ VB与AUTOCAD的接口(一)

VB与AUTOCAD的接口(一)

发布于:2006-11-19 13:00:19 来自:建筑设计/CAD下载及教程 [复制转发]
AutoCAD具有开放的体系结构,是一种极其灵活的应用系统,用户可以通过编程的方式对其进行定制,它允许用户和开发者采用各种方法对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。我们先对以往AutoCAD二次开发中用到的方法简单做一回顾,然后以Visual Basic6.0为编程工具,详细讨论应用ActiveX对AutoCAD进行二次开发的方法。
(一)AutoCAD二次开发中用到的方法
1 AutoLISP
AutoLISP(LIST Processing Language),它是一种表处理语言,是被解释执行的。它被嵌入在AutoCAD内部,作为二次开发的编程语言,她一直是低版本AutoCAD的首选编程语言。
2 autocad 的scri pt文件
scri pt 文件是成批集成Autocad命令的文本文件,可以在Autocad中运行,早期国内CAD二次开发中应用较为普遍,这种方法比较容易实现,通过在外部程序中按照要求将绘图参数融合进scri pt文件,然后利用autocad定制菜单实现绘图。
3 ADS
ADS(AutoCAD Development System)是AutoCAD的C语言开发系统,它直接利用C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可执行的文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合二次开发机械设计CAD、土木工程CAD等。
4 ObjectARX
ObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C 为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的Auto CAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARX for AutoCAD 2000,它能够对AutoCAD进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。ObjectARX是一种特定的C 编程环境,她包括一组动态链接库(DLL),这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。
5 VisualLISP
VisualLISP已经被完整地集成到AutoCAD 2000中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。用它开发程序的时间被缩短,原始代码能被保密;能帮助大家使用ActiveX对象及其事件;使大家很容易创建和分析LISP程序的运行情况。
6 VBA
VBA (即Mcrosoft office中的Visual Basic for Applications),被集成到AutoCAD 2000中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD 2000中丰富的技术框架打开一条新的通道。VBA和AutoCAD 2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。

全部回复(4 )

只看楼主 我来说两句
  • 54suddenly
    54suddenly 沙发
    (三)Visual Basic应用DDE实现对AutoCAD的控制
      DDE是Windows的强大功能之一,它可以使应用程序自动地接收由其它应用程序发送来的数据,当传送端的数据有变化时,接收端的数据也会随之改变,也可将命令或键盘输入传递给其它程序,实现远程控制。
      在VB编程环境中,创建应用程序的方法很简单,VB中能和其它Window应用程序建立DDE通道的控件有文本框,标签和图片框。下面结合简单实例,说明VB应用程序与AutoCAD间建立DDE通道和交换数据的方法。
      在VB中启动一个新项目,参见图(1)建立窗体,其中“建立链接”,“直线”,“标注”,“退出”为命令按钮,标有“Text1”的为文本框,用于建立DDE通道,并输入下面的事件代码。
    Option Explicit
     Private Sub cmdLine_Click() ’’画直线
      Text1.LinkExecute " [^3^3line 3,3 8,8 ^3]"
     End Sub
     Private Sub cmdText_Click() ’’标注文字
      Text1.LinkExecute " [^3^3text 10,10 1 90 AUTOCAD!^10]"
     End Sub
     Private Sub cmdLink_click() ’’建立链接
      Text1.LinkMode = 0
      Text1.LinkTopic = "autocad.dde|system"
      Text1.LinkMode = 2
     End Sub
     Private Sub cmdExit_click() ’’退出
      End
     End Sub
      运行此应用程序,注意在运行前,一定要先加载AutoCAD。单击“建立链接”按扭,cmdLink_Click()过程被执行,执行时设置文本框Text1的LinkTopic和LinkMode的属性,完成VB应用程序与AutoCAD间DDE通道的建立。LinkTopic属性用于通知AutoCAD由谁来提供数据,它被管道符“|”分成两部分,第一部分“AutoCAD.DDE”为应用程序名,第二部分“System”是通讯的主题。LinkMode属性用于切实建立链接,在LinkMode=0时,表示关闭以前的DDE通道,在LinkMode=2时,表示以手动模式激活DDE通道。

      在完成DDE链接后,VB应用程序就可以与AutoCAD间进行数据交换或命令传送了。单击“直线”按扭,cmdLine_Click()过程被执行,应用程序通过LinkExecute方法向AutoCAD发送命令,在AutoCAD中以点(3,3)和(8,8)为端心,画一条直线。语句中的^3相当于AutoCAD中的取消键Ctrl C,空格相当于AutoCAD中的回车键。单击“标注”按扭,执行cmdText_Click()过程,可在AutoCAD中显示以(10,10)为基点,高为1,旋转角度为90的字符串“AutoCAD!”。语句中的^10相当于AutoCAD中的回车键,在标注文字时不能用空格代替回车键。
    根据需要,可用上面的方法传送AutoCAD的其它命令,实现对AutoCAD的开发。
    (四)Visual Basic应用SCRIPT文件实现对AutoCAD的控制
    AutoCAD提供了一种被称为命令文件(SCRIPT 文件)的工具。它允许将不同的AutoCAD的命令组合在一起,并按照预先确定的顺序执行它们。AutoCAD的SCRIPT命令允许在图形编辑状态运行命令文件。输入SCRIPT命令并按回车就可以执行命令文件,AutoCAD会提示输入命令文件的名称。这是一种最简单实用的与AutoCAD接口的方法,结合VB开发工具,你可以方便地为你的工程软件增加绘图功能。下面我们提供一组VB代码,实现SCRIPT文件的自动生成。
    Private Sub Command4_Click()
    Open "c:\my documents\mycad.scr" For Output As #1‘建立一个SCR文件MYCAD.SCR
    Print #1, "limits 0,0 870,620" ‘设置绘图区域
    Print #1, "zoom all" ‘显示新的绘图界限
    Print #1, "setvar textsize 0.25" ‘设定文本高度
    Print #1, "layer new box c red box s box " ‘设置新层
    Print #1, "rectang w 2 5,5 " LTrim(Str(boxx 5)) "," LTrim(Str(boxy 5)) ‘绘制一矩形(5,5),(boxx 5,boxy 5)(其中:boxx,boxy为变量)
    Close #1
    End Sub
    此种方法只要用户了解AutoCAD命令的文本形式,在VB中可以方便生成SCRIPT文件,进而实现操纵AutoCAD的目的。

    2006-11-19 13:04:19

    回复 举报
    赞同0
  • 54suddenly
    54suddenly 板凳
    e.向图形中插入已有的一个图块的VB语句
    块处理是AutoCAD中经常使用的技术。块包括两种:一种是外部文件,使用块引用的方法加入到图形文件中;另一种是文件内部的块,该块的定义包含在当前图形中。内部块比较容易处理,可以对块进行编辑,也可以生成引用块。而采用外部文件时,有时为了图形输出的需要,必须将块引用用Xbind命令插入到图形文件中。
    如将一个图形中经常用到的图块BlockName1插入到点(20,20,0),其旋转角为0,比例因子为1。插入块的函数是InsertBlock,它返回一个块的引用实例对象BlockRef实际上;块也可以用InsertBlock函数插入到其它块中。块是可以嵌套的,但是它不能引用自身,否则会形成无穷的循环。
    程序代码如下:
    Private Sub Command3_Click()
    Dim BlockName As String
    Dim BlockRef As Object
    Dim InsertP(0 To 2) As Double
    Dim Xscale As Double, Yscale As Double
    Dim RotAngle As Double
    Dim Found As Boolean
    Dim EnTry As Variant
    InsertP(0) = 100
    InsertP(1) = 100
    InsertP(2) = 0
    BlockName = " BlockName1"
    ’’查找所有的文件中已有图块
    For Each EnTry In acadDoc.Blocks
    If EnTry.Name = BlockName Then
    Found = True
    Exit For
    End If
    Next
    ’’有则插入图块
    If Found Then
    SetBlockRef=acadDoc.ModelSpace.InsertBlock(_
    InsertP, BlockName, Xscale, Yscale, RotAngle)
    Else
    MsgBox "此图块名不存在。"
    End If
    End Sub
    f. 填充图形的VB语句
    本例提供的是画一个圆心为(3,3,0),半径为1的圆,然后填充这个圆的内部区域。具体过程如下:
    Dim hatchObj As AcadHatch
    Dim ptnName As String
    Dim ptnType As Long
    Dim b As Boolean
    Dim outerLoop(0 To 0) As Object
    ptnName = "ANSI31" ’’ 定义填充的样式
    patnType = 0
    b = True
    ’’ 在模型空间创建一个填充对象
    Set hatchObj = moSpace.AddHatch(ptnType, ptnName, b)
    ’’创建填充的边界,画一个圆心为(3,3,0),半径为1的圆
    Dim center(0 To 2) As Double
    Dim radius As Double
    center(0) = 3: center(1) = 3: center(2) = 0
    radius = 1
    Set outerLoop(0) = moSpace.AddCircle(center, radius)
    ’’ 把填充边界传递给 hatchObj对象,并显示填充
    hatchObj.AppendOuterLoop (outerLoop)
    hatchObj.Evaluate
    Acaddoc.Regen True
    g.保存图形的VB语句
    保存活动的图形,以下示例以当前名称保存活动图形然后再以新的名称保存该图形。
    Sub Ch3_SaveActiveDrawing()
    ’’ 以当前名称保存活动图形
    Acaddoc.Save
    ’’ 以新的名称保存活动图形
    Acaddoc.SaveAs "MyDrawing.dwg"
    End Sub
    当然你会想到去检查活动图形是否存在有未保存的更改。在退出AutoCAD进程之前或开始一个新的图形之前这样做是一种好的习惯。使用Saved属性可以确定当前图形是否包含未保存的更改。
    测试图形是否有未保存的更改内容,检查图形是否有未保存的更改并由用户确定是否保存图形(如果取消,则直接跳到结束处)。如果确定的话,使用Save方法保存当前图形,程序如下:
    Sub Ch3_TestIfSaved()
    If Not (acaddoc.Saved) Then
    If MsgBox("你是否想保存该图形?",vbYesNo) = vbYes Then
    acaddoc.Save
    End If
    End If
    End Sub
    亦可使用Save或SaveAs方法保存图形,具体使用方法请查看相关资料。
    现在国内有不少介绍ActiveX编程及AutoCAD的资料,但迄今还未发现有完整讨论AutoCAD的ActiveX编程的书籍,目前最容易得到的资料就是Autodesk公司编写的随机帮助,其中有一章“ActiveX Automation",有全部对象的方法、属性说明。具体内容请查看AutoCAD的随机帮助文件。
    本节主要论述利用VB的ActiveX编程实现与AutoCAD的连接的技术及相关VB语句。其实用用VB编写具有DDE功能的程序来控制AutoCAD也是不错的方法,在Windows平台下,VB和AutoCAD都支持强有力的DDE(动态数据交换)功能,既能与AutoCAD交换各种复杂的数据结构,又能向AutoCAD发送命令,由此开发出的应用程序也足能满足用户的需要,下面我们简单讨论一下这方面的内容。
    2006-11-19 13:03:19

    回复 举报
    赞同0
加载更多
这个家伙什么也没有留下。。。

CAD下载及教程

返回版块

52.09 万条内容 · 682 人订阅

猜你喜欢

阅读下一篇

我的浏览器不能用,怎么回事?

我的浏览器不能用,不能上网,页面显示的都是找不到服务器,卡巴斯基也不能更新但是网上邻居还是可以用,电脑也显示有网络联接重装一遍浏览器还是不能用,不知怎么回事?谢谢哪位指教

回帖成功

经验值 +10