(三)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的目的。
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发送命令,由此开发出的应用程序也足能满足用户的需要,下面我们简单讨论一下这方面的内容。
全部回复(4 )
只看楼主 我来说两句-
54suddenly
沙发
(三)Visual Basic应用DDE实现对AutoCAD的控制
2006-11-19 13:04:19
赞同0
-
54suddenly
板凳
e.向图形中插入已有的一个图块的VB语句
2006-11-19 13:03:19
赞同0
加载更多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的目的。
回复 举报
块处理是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发送命令,由此开发出的应用程序也足能满足用户的需要,下面我们简单讨论一下这方面的内容。
回复 举报