|
我听到许多关于这样的问题。AutoLISP与VBA有什么不同呢?我要学习怎样二次开发AutoCAD,但我不能确定先学哪一个工具。哪一个工具更好呢?
* b6 M0 G% h) x; V8 ~# j简洁的回答是他们都好,你应当两者都学。分析我的回答,你可以知道这不是最快的解决办法,但在你做出一个完整的决定前,一个完整的回答需要时间和更多的问题。举个例子:你懂BASIC吗?如果你懂,那么VBA学起来会更快一些;如不懂BASIC,那么你学过其它的编程语言吗?如果你学的正好是FORTRAN或PASCAL的话,那也很好。因为如果你已掌握了这两种语言,则VBA的学习将十分简单。如果你一点儿也不懂程序设计语言,那么AutoLISP将会是适合你学习的语言。
) n7 |# M4 M* A' g如果你正好没有程序设计的知识和经验,那么在AutoCAD里你应当学习什么语言?这个问题很难回答。这取决于你希望完成什么样的工作?每种语言都有其优点和缺点,AutoLISP擅长建立新命令和产生已有命令的连接。VBA擅长执行包括在其他应用程序中的组件,如Microsoft的Excel和Access。AutoLISP是基于表处理的编程体系,它允许程序员随意地存储和操作传送信息,然而VBA部件包括数据和对复杂情况的各种有效操作,这就是问题变得复杂的地方,除非你已真正懂得这些工具的好处,否则,很难回答你应该选择哪一个,但你应当知道你想完成什么和允许完成什么,因为它将引导你向正确的解决方法前进。
# |8 E+ H9 n1 K0 Z6 Twww.cnfnc.com 中国数控之家
" s) d: b8 K. {, ^# d9 k# w4 y, W" j) p" N; W! Y8 F" f
稍后,你会发现这一简洁的回答是恰当的,你将会学习两种语言,你要做的一些事,可以在AutoLISP中用十分简单的几行代码来解决。另一方面,你会发现VBA提供了一些最简捷的应用程序解决方案。例如,建立一个复杂的包括许多对话框的应用,AutoLISP支持对话框,但是不如VBA支持的程度强,同时,在AutoCAD中一个任务的情况下,VBA提供在对象级别上访问AutoCAD系统,但它对AutoCAD的一些基本命令的支持性并不是很好,而AutoLISP在这一点上却做的很好。
1 B7 e! b; Z- J; Q: h; f这两种语言不具有很好的兼容性,这种情况是必然的,就是说,你不能把在AutoLISP中写的东西放到VBA中随意使用,反之亦然。我并不是说这种情况不可能的,但却是很难以实现。最低限度是,一但你选择了一种语言来设计程序,你就不可能中途又用另一种语言来解决程序中的问题,你不得不继续使用你最初选择的语言。
/ ^6 B. }6 s2 o# j! A. p; m$ E建立个词汇表
# a1 T( |0 j. ?0 f3 h那么,让我们从学术角度讨论一些两种语言间的不同之处。前面提到的AutoLISP是综合了逻辑结构与传统AutoLISP命令的一个完美工具,你能组合AutoCAD命令并放在一个有条件的逻辑脚本里,而产生强有力的自定义命令,这些命令能被用于自动操作通常的任务,也能解决计算问题而得到一个结果。基于命令种类的思想比目标角度的思想更简单,一个清楚直接指出不同点的例子:在一个多义线对象里打断编辑方法。如果你要打断一条多义线,你必须先计算并重新更新这个物体,Extend和Trim命令也一样。这些命令现在还并不包含在AutoCAD对象系统的实体对象编辑方法中。在不久它们会随时出现,这就是对象的好处。
! k' |' [$ A5 a+ A, Y! p数控,机床,模具设计,数控车床,数控技术
" c+ u; C* ` D4 b! E. h
1 g+ P, \+ G3 \在许多情况下,对象级的处理比命令方式更高级。当你执行一个命令时,你有可能可以也有可能不可以直接操作你所选取的对象。因为你必须依赖于AutoCAD的对象选择机制。对象不是模糊不清的。当你专门指定一个对象时,对你要操作的对象,它是很清楚的。$ K! _$ U* e# N, ~" M
对象级别的处理在VisualLISP也可实现。使用VisualLISP中的(VL)扩展,你能改变对象的参数且在需要时调用对象的方法。你不得不使用对象引用,它可以从已有的实体名或直接产生的对象中生成,在大多数情况下,一个有经验的AutoLISP程序员不需要使用这些对象,但迟早它们会派上用场。" f' G2 j6 W$ \) ~' Y$ ^
VisualLISP的另一优点是比VBA更接近AutoCAD系统。VBA不是由AutoCAD产生的,它是在其它的环境下同样工作的一个附加的语言,象Microsoft的Word和Excel一样。它也类似于在AutoCAD中用VB(Visualbasic)语言编制程序的方法。VisualLISP仅在AutoCAD里运行,它的优势是软件间有着密切的工作关系。当在命令行里提示用户时,你能发现一个不同点的例子。在VisualLISP里,你可以使用PROMPT或PRINT语句。在VBA里,你必须使用Prompt方法,这是优化对象的一部分,也是绘制对象的一部分,下面的几行代码将对AutoCAD命令行发出一个提示。第一行为VisualLISP语言;第二行用的是VBA。 www.cnfnc.com 中国数控之家
7 O3 P2 J5 ]" B7 _- R, ](Prompt“ starting.”)
3 { J) ^: a3 ithisDrawing.Utility.PromptCh$(10)&“starting”
$ h( \- L2 t2 {0 V9 b有两件事显而易见,在VisualLISP里,在命令行窗口中,“ ”使光标跳到新的一行。VBA使用Chr$(10)功能,必需把它放在使用“&”操作符的提示字符串前才可以运行。其次是当类型数量相对实用对象的提示方法接近时,才会使用这个。" R* q7 X+ u" w) `2 p5 w
在AutoLISP中,可使用PRINT语句,在生成值前,“ ”使顺序转到新的一行开始。PRINT的另一个特点是可以输出任何数据类型,而PROMPT功能只能处理字符串。. T8 W" H0 n4 z0 R0 h
在VBA里,对于优化对象的方法和AutoLISP里的“GET×××”函数一样,你必须一直使用字符串。AutoLISP包括几种不同的把你要使用的数据类型转化成字符串型的函数。RTOS把数值型转化成字符串型;ITOA把数值型转化成整数型。VBA提供两个数据转换函数:STR和FORMAT。当转化一个非负数时,STR函数返回一个精确的字符串,即在字符串前加上一个空格。这就是,str(-1.1)返回字符串“-1.1”,str(1.1)结果是“1.1”。FORMAT允许你设立特别的转换格式。对正在学习VBA的人,可利用在线帮助查看有关该函数的帮助,它提供了大量的例子来演示数据是怎样被转化产生的。 * \4 e& u) R8 \
中国数控之家-数控机床,模具设计,数控车床,数控技术,数控编程,数控铣床% `. l1 u+ v" L' _9 ]0 @
3 t- l7 x4 G! y! f2 Y0 w ?0 D
衡量的尺度
6 Q. h' e1 ]+ n- t) p% ]1 |5 W对于AutoCAD的定制来说,由于AutoLISP语言是以命令的标准建立的,这促进了偏向于支持AutoLISP的尺度。你能使用AutoLISP中带“C:”作为新命令名称的头两个字符的方式来定义函数,该命令就像AutoCAD命令一样使用。“C:”函数被叫做“命令函数”。VBA有宏,你必须从程序管理器里运行宏。从命令提示(或普通的macro菜单)里运行不了宏,这就存在着一个重要问题。用户可以使用AutoLISP启动VBA程序管理,然后以相同的方式执行宏。使用命令行语句时,你应该确信在语句前加了“-”,格式如下:" a c- _! ~9 L4 J* P3 j* j) m& B
command“-VBALOAD”“mymacros”“-VBARUN”“mymacro”; ~' Y& Y7 s! e5 p2 ~$ i
如果你未用此负号,将会出现一个对话框,提示用户装载VBA和运行宏。在多数情况下用户并不想出现这个对话框。取而代之的是在命令行装载宏并用一个VBA模块来运行它,这样,首先出现的是在AutoLISP中很强列关注的东西,不再仅仅只是一个倾向。一但一个错误和漏洞发生,就会有其他相关问题出现,这在编程中并不寻常。$ U' q0 P$ d# h$ V
另外一点,VBA允许一个经由AutoLISP启动的过程,VBA还有一个反应绘图及同时处理多个图形的优良机制。在VisualLISP里,你能做这些工作,但在VBA里就不是如此容易了。其反应的事物与图形连系在一起,甚至嵌入图形模板中,有多种原因允许你所编程绘制图形。 |
|