VB与AutoCAD二次开发入门技巧资料13051VBAutoCADR14TEXT.docx
- 文档编号:11977249
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:40
- 大小:45.58KB
VB与AutoCAD二次开发入门技巧资料13051VBAutoCADR14TEXT.docx
《VB与AutoCAD二次开发入门技巧资料13051VBAutoCADR14TEXT.docx》由会员分享,可在线阅读,更多相关《VB与AutoCAD二次开发入门技巧资料13051VBAutoCADR14TEXT.docx(40页珍藏版)》请在冰豆网上搜索。
VB与AutoCAD二次开发入门技巧资料13051VBAutoCADR14TEXT
用VB在AutoCADR14中写TEXT的方法
AutoCAD可以写不同高宽比、不同角度、不同颜色的TEXT。
无论是用AutoCAD
的TEXT命令,还是用AutoLISP,都是很容易做到的,用VB是否也很容易哪?
我们
来看下面一段示例:
PublicobjAcadAsObject
PublicobjDocAsObject
DimentAsObject
DimstartPoint(0To2)AsDouble
DimPoint1(0To2)AsDouble
SetobjAcad=GetObject(,"AutoCAD.Application")'获得AutoCADR14对象
SetobjDoc=objAcad.ActiveDocument
'初始化TEXT的起点
startPoint(0)=10#
startPoint
(1)=10#
startPoint
(2)=0#
'写一串TEXT,其中字高为5
Setent=objDoc.ModelSpace.AddText("textString",startPoint,5#)
'初始化TEXT的调整点
Point1(0)=20#
Point1
(1)=10#
Point1
(2)=0#
Withent
.Color=1'改用红色
.ObliqueAngle=0.174444'改倾斜角度
.VerticalAlignment=0'设垂直位置为0
.ScaleFactor=1#'设文字高宽比,当需要两端对齐时,必须任意给一个值
.HorizontalAlignment=5'设文字为两端对齐
.TextAlignmentPoint=Point1'设对齐点
EndWith
SetobjAcad=Nothing
aVB应用程序中用DDE功能开发AutoCADforWindows
目前,许多工程CAD系统是以AutoCAD作为支撑软件,在其基础上进行二次开发而形成的。
AutoCADR12forWindows以AutoLISP和ADS作为二次开发工具,但它们都有不足之处,AutoLISP速度慢,没有友好的开发环境,ADS是基于C语言的开发环境,而C语言面向Windows编程本身难以掌握,因此AutoLISP和ADS的使用都受到一定的限制。
VB是Windows下主要的开发工具之一,它的“可视性”和“事件驱动性”简化了面向Windows的编程,深受广大用户的青睐。
Windows下,VB和AutoCAD都支持强有力的DDE(动态数据交换)功能,用VB编写具有DDE功能的程序来控制AutoCAD,既能与AutoCAD交换各种复杂的数据结构,又能向AutoCAD发送命令,由此开发出的应用程序能满足用户的需要,同时又缩短了开发周期。
本文结合实例介绍了用VB开发AutoCAD的途径与方法。
一、直接利用DDE功能开发
DDE是Windows的强大功能之一,它可以使应用程序自动地接收由其它应用程序发送来的数据,当传送端的数据有变化时,接收端的数据也会随之改变,也可将命令或键盘输入传递给其它程序,实现远程控制。
在VB编程环境中,创建应用程序的方法很简单,首先是设计用户界面,也就是在空白窗体中放入所需要的控件,如命令按钮,单选钮,文本框,标签,图片框等,然后针对各控件上要发生的事件(如鼠标单击,鼠标移动等)书写事件过程,最后将编写的应用程序运行,调试,生成执行文件即可。
VB中能和其它Window应用程序建立DDE通道的控件有文本框,标签和图片框。
下面结合简单实例,说明VB应用程序与AutoCAD间建立DDE通道和交换数据的方法。
在VB中启动一个新项目,参见图
(1)建立窗体,其中“建立链接”,“直线”,“标注”,“退出”为命令按钮,标有“Text1”的为文本框,用于建立DDE通道,并输入下面的事件代码。
OptionExplicit
PrivateSubcmdLine_Click()'画直线
Text1.LinkExecute"[^3^3line3,38,8^3]"
EndSub
PrivateSubcmdText_Click()'标注文字
Text1.LinkExecute"[^3^3text10,10190AUTOCAD!
^10]"
EndSub
PrivateSubcmdLink_click()'建立链接
Text1.LinkMode=0
Text1.LinkTopic="autocad.dde|system"
Text1.LinkMode=2
EndSub
PrivateSubcmdExit_click()'退出
End
EndSub
运行此应用程序,注意在运行前,一定要先加载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的开发。
二、通过调用VBADS开发
上面介绍了在VB应用程序中直接利用DDE与AutoCAD作用实现开发的方法,此方法要求用户自己建立与AutoCAD间的DDE通道,此外,我们还可以通过调用VBADS函数对AutoCAD进行开发。
在VBADS函数库中已有专门的函数负责建立应用程序与AutoCAD间的DDE通道,而不需用户亲自建立,较为方便。
另外,VB应用程序还可以通过VBADS函数向AutoCAD发送数据和命令,同时也可以利用VBADS函数的返回值来获得AutoCAD的数据,实现对AutoCAD更深入的开发。
为了利用AutoCAD的VBADS函数建立VB的应用程序,AutoCAD提供了几个VBADS支撑文件,这些文件除DDEBAS.EXE和ACADVB.DLL存放在C:
\ACADWIN子目录外,其余都存放在C:
\ACADWIN\VB\NEW子目录中。
文件如下:
1.DDEBAS.EXE-ADS/DDE服务者,为保证VB于AutoCAD间正常通信,此命令必须首先在AutoCAD中用XLOAD命令加载运行。
2.ACADVB.DLL-VBADS动态连接库,在运行VB应用程序前,应将其拷到C:
\WINDOWS\SYSTEM\子目录下。
3.GLOBAL.BAS-VBADS应用程序中所需要使用的全局变量定义文件。
4.ADSFUNCS.BAS-VBADS函数库,可以在VB应用程序中直接调用。
5.ADSFUNCS.FRM-包含有应用程序和AutoCAD间建立DDE链接的窗体文件。
下面结合具体的例子,说明利用VBADS函数开发应用程序的方法。
[HJ] 启动VB,打开C:
\ACADWIN\VB\NEW\NEWPROJ.MAK项目文件,参见图[2]建立新窗体,并输入如下的事件代码。
OptionExplicit
PrivateSubForm_Load()
DDE_TIMEOUT=-1 '等待DDE事件
txtX.Text=5 '圆心,半径的隐含值
txtY.Text=5
txtRadius=3
EndSub
PrivateSubcmdCircle_Click() '画圆过程
DimretAsInteger
DimptAsads_point '定义Ads点类型
DimRadiusAsDouble
DimApndllAsApndLLType '定义增加链表类型
DimResbufAsResbufType '定义结果缓冲器
pt.X=val(Trim(txtX.Text)) '给圆心,半径赋值
pt.Y=val(Trim(txtY.Text))
Radius=val(Trim(txtRadius.Text))
ret%=ads_newrb(10,Resbuf) '建立新的结果缓冲器
Resbuf.hResbuf=0
Apndll.apType=RTSTR '说明链表类型为字符串
Apndll.apString="circle"+Chr$(0) '链表赋值
ret%=ApndLLNode(Resbuf,Apndll) '增加链表到结果缓冲器
Apndll.apType=RTPOINT
Apndll.apPoint=pt
ret%=ApndLLNode(Resbuf,Apndll)
Apndll.apType=RTREAL
Apndll.apReal=Radius
ret%=ApndLLNode(Resbuf,Apndll)
Apndll.apType=RTNONE '链表结束值类型
ret%=ApndLLNode(Resbuf,Apndll)
ret%=ads_cmd(Resbuf) '执行结果缓冲器的命令
ret%=ads_relrb(Resbuf) '释放结果缓冲器
EndSub
PrivateSubcmdExit_Click() '退出过程
End
EndSub
在应用程序运行前,必须首先运行AutoCAD,并用命令(XLOAD"DDEBAS")加载DDEBAS.EXE。
在上面的应用程序中,除语句DDE_TimeOut=-1外,没有其它涉及建立DDE通道的语句,因为应用程序与AutoCAD间建立DDE通道所需要的代码已保存在VBADS函数库中,打开支撑文件adsfuncs.bas,可以发现SubOPENDDE()过程,它负责VB应用程序与AutoCAD间DDE通道的建立,所以用户在开发应用程序时,只管调用VBADS函数即可。
例子中的cmdCircle_Click()过程,是在VB4.0编程环境通过调用VBADS函数开发的,运行程序后在文本框中输入半径和圆心的值,单击“画图”按扭,即可在AutoCAD中得到所需的圆。
cVB应用程序编制实例
VB自1991年问世以来,已从1.0版步入到功能十分强大的5.0版。
VB以其开发软件周期短、操作简单、可视化程度高的优点倍受编程人员的青睐。
近几年来,许多Windows程序员应用VB作为编程语言,开发了大量的应用软件。
本文通过几个实例说明了VB的强大功能。
一、工具棒的建立方法
Windows应用程序的操作界面都含有大量的图标,这些图标集中放在某一个区域形成工具棒(Toolbars),工具棒中的图标用图示的方法表示某一种功能,可以加速操作,在某些Windows应用程序中还把这些工具棒直接称为加速棒(Speedbars)。
下面介绍编制工具棒的方法。
在窗体上画一个足够大的图片框,使用这个图片框可以存放图标。
设置图片框的Align属性,使图片框列在窗口的顶部,即[窗体名][控件名]Align=1.
在图片框中增加影像控件(ImageControl)数组或者三维命令控制按钮数组(3DCommandButtonControl)。
改变控件的Picture属性,输入图形,图形的格式为:
*.BMP,*.DIB,*.WMF,*.ICO。
下面的实例介绍了工具棒的建立方法,具体步骤为:
1.建立一个图片框,取名为Demo(即Name属性为Demo),设置Align属性,即Demo.Align=1
2.在图片框上增加三维命令按钮,设置Name属性为Tool,设置Index的属性为0(第一个控件),改变Picture属性,输入图示化的图形(文件)。
改变提示信息,设置Caption取值为空。
3.增加三维命令按钮控件,设置Name属性为Tool,注意使Index属性分别为1,2,……。
4.建立窗体Paint事件过程
SubFormPaint()
Demo.ScaleHeight=Tool(0).Height'设置工具棒的高度
iw%=Tool(0).Width'获取第一个图标的宽度,用于设置其他的图标宽度
Fori%=0To3
Tool(i%).Height=Demo.Scaleheiht
Tool(i%).Width=iw%
Tool(i%).AutoSize=1'设置图标中的图形充满整个图形框
Tool(i%).Moveiw%*i%,0'重新排列所有图标的位置
Nexti%
EndSub
5.建立图标事件过程
为工具棒中的每一个图标增加一个过程,执行相应的命令:
SubTool_Click(indexAsInteger)
Ifindex=0Then
Tool(0).Picture=Load(″animal.bmp″)'更换第一个图标中图像
ElseIfindex=1Then
j%=Shell(″calc.exe″,1)'执行WINDOWS95计算重新CALC.EXE
ElseIfindex=2ThenEnd'中止程序的执行
EndIf
EndSub
在实际应用中,程序员可以发挥自己的想象力,从而完善工具棒的功能。
AutoCAD中表格自动化
工程图纸中经常遇到大量表格填写,例如工程勘察中的成果表、设计的材料表,在AutoCAD中文字处理比较差,用TEXT、DTEXT命令在表格中定位也不方便,填写的表格既不美观,还容易出错。
在一些杂志中有关表格填写程序介绍,但是使用不方便,也不能连续填写多个表格,长距离线路勘察中线转点少则几十个,多则上千,中线数据可由计算直接生成,能否利用中线数据直接填表出图。
利用AutoCAD二次开发,编写中线成果填写程序(zxcg.lsp),改变以往出图工序(填写、校对),大大提高工作效率。
一、程序功能与编写说明
1、本程序具有下列功能:
(1)直接在文本编辑器(EDIT、QE、WPS等等)编辑、修改数据,免去AutoCAD文字编辑、修改之不便;
(2)可以自动分页,自动填写工程名称、档案号、日期等等;
(3)可以自动处理中线成果数据前后的空格,例如:
“123123.123”将自动转化为“123123.123”;
(4)可以自动识别两种工程名称数据文件;
(5)文本状态下数据正确无误,出图前无需在AutoCAD中修改,调图速度和重新成图速度相差无几,可直接保存数据文件,节省磁盘空间。
2、程序说明:
程序利用AutoLISP的计算、判断、字符处理、循环结构以及调用Text命令等功能对读入的数据进行处理后填写,与本程序对应的Zxcg.dwg图形文件含四个表格图块,程序中的有关参数均取决于四个图块。
二、使用说明
1、关于中线成果数据格式:
(1)无曲线
第一行,总点数(N)
第二至七行,点名(NAME)、里程(K)、高程(H)、坐标X、Y、转角(B)……重复二至七行(没有数据项用空行代替)
(2)有曲线
第一行,总点数(N)
第二至十一行,点名(NAME)、里程(K)、高程(H)、坐标X、Y、转角B,半径R,切线长T、曲线长L、外矢矩E……重复二至十一行(没有数据项用空行代替)
2、关于工程名称数据格式:
(1)单标题
第一行,工程名称
第二行,档案号(如测-3777/表,只需输入3777)
第三行,日期(可省略,取当前日期)
(2)双标题
第一行,工程名称大标题
第二行,工程名称小标题
第三行,档案号(如测-3777/表,只需输入3777)
第四行,日期(可省略,取当前日期)
三、加载及运行
在AutoCADR12(或AutoCADforWindows)中,把Zxcg.lsp和Zxcg.dwg拷贝到SUPPORT子目录下,用鼠标点文件(File)下应用程序(Applications),或在Command:
下敲入Appload加载Zxcg.lsp,或在Command:
下敲入(Load“Zxcg”)即可。
然后在Command:
下敲入ZX运行程序,本程序将中文提示。
四、结束语
该应用程序提供了两种形式的表格,有兴趣的AutoCAD用户不妨增加几种表格,修改程序中对应的参数即可。
附源程序
...****ERROR****
(DEFUNERR(X)
;IFANERROR(SUCHASCTRL-C) OCCURS
;WHILETHISCOMMANDISACTIVE
(IF(AND(/ΚX″FUNCTIONCANCELLED″)
(/ΚX″QUIT/EXITABORT″))
(PPINC(STRCAT″ιnERROR:
″X)))
(SETVAR″CMDECHO″1)(SETVER″BLIPMODE″1)
(IF(ΚTYPERF)′FILE)(CLOSERF))
(IF(ΚTYPERN)′FILE)(CLOSERN))
(SETQRFNIL)(SETQRNNIL)
(SETQ*ERROR*OLDERR)
;RESTOREOLD*ERROR*HANDLER
(PRINC))
...****FILETOREAD****
(DEFUNINPUT()
(IF(ΚFF1nil)(SEFQFF1(GETVAR″DWGPREFIX″)))
(SETQF1(GETFILED″请输入中线成果数据文件″FF1″DAT″12))
(SETQLF(STRLENF1)FF1(SUBSTRF11(-LF4)))
(IF(ΚFF2nil)(SETQFF2FF1))
(SETQF2(GETFILED″请输入工程名称文件″FF2″TXT″12))
(SETQLF(STRLENF2)FF2(SUBSTRF21(-LF4)))
(initget″YesNo″)
(setqYN(getkword″ιn请选择有曲线元素Yes/No:
(N)″))
(if(ΚYNnil)(SETQYN″No″)))
...****DATAFORPROGRAMME*****
(DEFUNDDAT()
(SETQRF(OPENF1″r″))(SETQRN(OPENF2″r″))
(SETQGN(READ-LINERN)GG1DAH(READ-LINERN))
(IF(ΚATOIDAH)0)(PROGN(SETQGG2GN2DAHDAH(READ-LINERN))))
(SETQDAT(READ-LINERN))
(IF(ΚDATNIL)(PROGN(SETQDAT(GETVAR″CDATE″));取当前日期
(SETQDAT(FIXDAT))(SETQDAT(ITOADAT))
(SETQYY(SUBSTRDAT14)MM(SUBSTRDAT52))
(SETQDD(SUBSTRDAT72)DAT(STRCATYY″-″MM″-″DD))))
(SETQNO(READ-LINERF)N(ATOINO))
(SETQNF26NN29);首、次页行数
(SETQM(FIX(+(/(-NNF)NN)2))):
计算页数
(SETQNL(REM(-NNF)NN))(IF(ΚNL0)(SETQM(-M1)NLNN))
(IF(ΙΚNNF)PROGN(SETQM1)(SETQNLN)))
(princ″共读入″)(PRINCN)(PRINC″点,分″)(PRINCM)(PRINC″页填写!
″)
(SETQYY8XX230);行距、页距
(SETQI1X00Y00DAH(STRCAT″测-″DAH″/″))
(IF(ΚYN″NO″)(SETQDI(LIST678.58103.58125.08150.08180.08208.08))
(SETQDI(LIST1071.9088.39105.58122.61140.30156.83172.86188.07208.00232.73))))
;表格项数及各项横坐标(X)
(SETQYYF285.0YYN305.7);首、次页第一行纵坐标
....****删除数据前后空格(QKG)******
(DEFUNQKG()
(SETQLE1)
(WHILE(〈LE(STRLENTXT))(RPOGN(SETQLF(+1LE))
(WHILE(Κ(SUBSTRTXT11)″″)(PROGN (SETQTXT(SUBSTRTXT2(STRLENTXT)))))))
(SETQLE(STRLENTXT))
(IF(〉LE2)(WHILE(AND(Κ(SUBSTRTXTLE1)″″)(ΛLE2))
(PROGN(SETQLE(-LE1)TXT(SUBSTRTXT1LE))))))
.....*****ZXTX******
(DEFUNZXTX()
(PRINC″ιn正在填写中线成果数据,请稍候!
″)
(WHILE(ΙΚIM)(PROGN(SETQPT0(LISTX0Y0))
(SETQP1(LIST(+X0236.0)348.5))(SETQP2(LIST(+X0207.0)342.0))
(SETQP3(LIST(+X0227.0)342.0))(SETQP4(LIST(+X0222.2)335.6))
(IF(ΚYN″No″)(IF(ΚI1)(SETQZX″*PZX-F″)(SETQZX″*PZX-N″));图块选择
(IF(ΚI1)(SETQZX″*QZX-F″)(SETQZX″*QZX-N″)))
(COMMAND″INSERT″ZXPT0″1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB AutoCAD 二次开发 入门 技巧 资料 13051 VBAutoCADR14TEXT
![提示](https://static.bdocx.com/images/bang_tan.gif)