CAD设计论坛

 找回密码
 立即注册
论坛新手常用操作帮助系统等待验证的用户请看获取社区币方法的说明新注册会员必读(必修)
查看: 6946|回复: 11

[开发] 请教vba和lisp有什么区别

[复制链接]
发表于 2006-12-20 16:50 | 显示全部楼层 |阅读模式
我们知道lisp文件可以导入autocad进行加载,看了置顶的vba教程,觉得vba就是用命令模式简化手动操作。但是貌似和lisp是一个功能呀。请问vba和lisp有什么区别?
发表于 2007-1-1 08:51 | 显示全部楼层

回答

1)Visual LISP
8 p( W0 \3 b9 c适于描述人机交互操作的过程,善于编写模拟设计师思路的专业设计程序。对于各种用户输入的接收、错误识别与恢复等操作具有相当优秀的功能,尤其是善于充分发挥CAGD功能的巨大作用,充分利用交互操作的技巧。相比之下,具有最多样式的程序运行模式。不同版本的程序,相比之下,具有最好的兼容性,甚至可以直接运行。- z. N( ]; e- l( ~) N
这种程序设计可以找到大的资源,包括书籍、程序实例、英特网上的资源和技术交流。0 C  M8 G0 q, _
过去AutoLISP 最大的不足是不能编译,较大的程序包没有“工程(Project)”的概念,这无疑对较大规模的程序设计造成了困难。而这些现在已经被 VLISP 圆满解决了,编译成VLX 的老的AutoLISP 程序,其效率也会比解释运行条件下提高5~8倍。( Y( u2 W% |, v; R. k: N
2)ADS 9 a8 X; I5 ]) n8 n& q% A" I1 x
曾经是在 AutoLISP 之后的一种程序设计模式,在 R14 之前的AutoLISP 程序虽然是解释运行,仍比ADS程序快一些,因为实际上ADS是用AutoLISP与AutoCAD交互。从AutoCAD R14起,Autodesk已经不再支持和发展 ADS程序设计模式,同时却增加了Visual LISP,以进一步提高AutoLISP 的整体性能,同时用ObjectARX取代了ADS。
) G- Y  {6 N0 ]2 z( ]& o* A3)VBA
& \. a8 f- [( ^自 R14开始嵌套在AutoCAD 之中的程序设计方法,VBA是根据微软公司的规则,在每一个Windows下的应用软件都必须具有的功能。
; H3 }% c& k3 ~0 N# k' x9 P其优点是可以很容易地使用Windows系统资源,使AutoCAD能容易地与其他Windows下的应用软件交互。VBA 对话框设计能力比DCL好得多,多图档环境下的应用程序也比也比VLISP提供了更多的支持。但由于它是使用ActiveX与AutoCAD交互,程序设计比较复杂。会成为与VLISP并列的另一种专业用户程序设计语言,不太容易学会。因为VBA并不就是VB,所以熟悉VB的人,在使用VBA作AutoCAD程序设计时,也需要新学大量的东西,只不过VBA的规则与VB充分相近。* N, K0 U, z( c2 n6 L. Z3 Y8 o
在设计过程模拟类的程序设计中,VBA明显不如 AutoLISP那样顺利,毕竟 AutoLISP 脱胎于人工智能语言。另外,如果 VBA 作者因为“疏忽”,没有提供相应的方法和属性,老的AutoLISP能够访问的对象数据、能够激活的某些AutoCAD对话框,VBA却不能。VBA虽然不是编译运行,数据结构和程序写法却像ARX一样相当严格,这对于工程师来说,需要有一个适应过程,你只能按照VBA的可能去组织自己的数据,而不能像VLISP那样按照专业设计要求去创建数据结构。
+ b: w) P% D" \( N9 m比较明显的几个缺憾是:
+ p2 X* Z$ P4 t+ v& ~  x+ Y4 j# LVBA中不能像VLISP那样几乎随心所欲地使用AutoCAD命令,只能象脚本文件的模式,以字串方式向AutoCAD命令行发送一串响应,这个字串的内容也只好在自己的程序中生成和进行数据转换。这样,许多交互操作的技巧,在VBA中不能直接借用。) Y9 @" x2 B" U
VBA是以对象作为数据处理的基本单元,在VLISP中堪称特色的CAGD程序设计技术,在VBA中则无法实现。因此像Trim、Extend、Dim-Diameter之类的命令都不能真正实施,要想完成这样的操作,相关数据只能在程序中自己计算。这样,程序设计就不能充分利用AutoCAD的操作技巧,必然复杂和罗嗦。放着AutoCAD优秀的数据库,却不能充分发挥它的作用;本来能用AutoCAD完成的动作,却要自己编程实现。这就是VBA最大的缺憾。3 i& ?( N3 B9 ?3 a" i) U% G
VBA 另外的问题是不能编译,源程序始终以相当容易接近的方式,暴露在最终用户面前。很容易由于用户的误操作,使曾经正常的应用程序出错甚至崩溃。这正好是老的 AutoLISP 的致命缺点,使用 VLISP 的程序包编译功能,目前还不能将 VBA 包装进去之后解决源代码加密的问题。VBA的源代码加密目前只有使用 PassWord。
6 X% B; {, Z' W& |VBA与Visual LISP 之间仅有比较简单的内部数据通道,例如处理简单的点位表。从这方面说,VBA的作者好像不太了解AutoCAD的特色功能,也不太了解用户们将会怎样使用AutoCAD进行自己的专业设计。
- I. e$ f3 z" y* C扩充VBA的功能可以用 VC++ / ARX 程序,但是相当复杂,对于一般工程师来说,很难掌握。对VBA的完善和扩充,只能等待Autodesk的工作结果。  j5 ^2 f0 q- c( }
4)ObjectARX
7 ~. i# W: Z2 K" e& _7 L# E8 A在Autodesk内部或增值软件开发商中使用。由于ARX是使用Visual C++作为基本程序设计语言,无论其效率、数据处理和软硬件的控制能力都是最好的,是唯一圆满地针对多图档环境的程序设计方法。是从根本上扩展 VLISP / VBA 的程序设计方法。
% ?2 e- w2 h8 J$ Y1 O) B但是,与AutoCAD命令交互和对象数据库访问功能,ARX与VBA并没有实质性的区别,就是说,同样很难借用AutoCAD强大的CAGD功能和交互操作的技巧。另外,要想真正发挥这种开发模式的作用,对于程序设计者的要求(计算机专业知识、软件专业知识等等)也较高,而且程序运行风险较大。要求程序自己做好各种数据的测试,自己设计好各种条件下的出错处理和恢复,否则ARX 程序的崩溃常常会连带 AutoCAD、甚至操作系统一起崩溃。由于ARX技术是大部分开发商的工具,因此,真正有用的编程技巧也不太容易通过一般的交流得到。可见,这种开发模式不适于在专业设计工程师中间普及。6 C2 U7 }$ G1 c- T( I
粗略地说:0 F6 F- H3 q% o! i6 x
ARX/VBA的特点在于以AutoCAD的对象、方法和属性为基本操作数据,适合于“构建”AutoCAD的功能。实际上,一个对AutoCAD的操作并不熟练的人,只要充分理解了AutoCAD的对象模型结构,也能写出操控AutoCAD的程序。就是说,这种程序设计模式,并不太依赖于程序设计者熟悉AutoCAD操作的程度如何。换句话说:对AutoCAD操作的熟练程度,对于ARX/VBA程序设计并没有明显的帮助。
8 \) t$ I6 j2 Z, j/ I2 }! F; t而VLISP则是灵活而充分地使用AutoCAD的现有功能,适合于“组合使用”AutoCAD的现有功能。这样,程序设计者对AutoCAD操作的熟练程度、对AutoCAD理解的深入程度,就明显地影响着程序设计的结果。就是说,这种程序设计模式,将能充分利用程序设计着使用AutoCAD的经验和技巧。当然,用VLISP按照ARX/VBA的ActiveX模式写程序,也是可以的。在本书中有不少这样的实例。但是这不是VLISP的特长。* A5 m; w# k" c7 x! A, t
作为 CAD 系统,通常由三个层次的软件组合而成:, n. V6 N. ~! a5 X+ [) N, r5 ^
1)设计软件的底台:提供界面、环境、核心算法、数据库等基础设施。现在我们是在 AutoCAD这个底台上进行工作。
! i" n* v8 j3 q; |/ g! i2)设计支持软件,提供与设计需要相关的,比较专业的支持软件:国标图库、通用设计工具、设计手册等等。这些软件多数是由增值软件开发商完成的。
) K+ g6 D" n: U# @0 V3)专业设计软件,提供窄范围、大深度的专业设计自动化或者辅助系统:例如:发动机装配工具设计、胶印机控制凸轮设计、组合机主轴箱设计等等。
( B, w1 [& n& I, f( N& e实际上,CAD系统能否真正体现出它的存在价值,最明显的标志就是上述专业设计软件。这些软件真正起到了“设计”的作用。实践证明,在某个专业性很强的设计上,它确实能够替代工程师!5 n" J1 n- d, O7 y! \
对于1)和2),可以由一些不必很了解设计,而软件知识较多的人来写。当然,应当由现场工程师进行测评,防止写成“学院派”的设计支持软件。而对于3),就只能由设计师直接参与来写,这样的题目范围较小,几乎是开发商永远的“盲区”。由于专业性太强,知识结构太偏,对于工科大学毕业,没有在这个行业里,做过几个真正的设计的人,很难听懂专业设计师的叙述,要求他完成这个程序,就太过分了。! ^7 d* b5 r4 `8 t
可见,必须有一个能够被专业设计师所掌握,又能够发挥他们的长处(熟悉设计和交互操作),避开他们的短处(软件知识较少)的开发方法。这就是AutoLISP。
) a& p7 m3 k; T) K( K4 F% f可以在AutoLISP程序中引用AutoCAD的几乎所有的功能,进行图形处理的自动化,尤其是较深层的应用——对象数据库的操作。
6 u  O! D) c; h在Visual LISP的协助下,从对AutoCAD进行操作的功能上讨论,仅比ARX少几个功能:自定义AutoCAD对象、多图档的深入管理等。从目前的情况看,AutoLISP是AutoCAD中几乎所有的应用程序的“总管、大管家”,而且目前只有AutoLISP 表达式,才能以添加在脚本文件、对话框程序、菜单、甚至VBA程序的ThisDrawing.SendCommand …中,更可以直接用在AutoCAD的命令行中响应几乎所有的命令。" C" d' }( }/ W# G. ~/ U
(5)其它性能" p2 u& Q7 c& e% g7 D
LISP是典型的结构化程序设计语言,AutoLISP是解释运行,源程序保密性差,巨量数据的复杂运算效率较低,文件管理功能简单,但可以在绝大多数源程序内容不变的条件下,用Visual LISP将其编译成VLX程序包或者FAS程序,这样处理之后的AutoLISP程序,将具有与ARX程序相同的高保密性能,也将具有比解释运行明显提高的运行效率。而且,AutoLISP程序设计的复杂程度和运行风险大大低与ARX,绝少在程序崩溃后连带AutoCAD崩溃。! `$ o3 p1 g% S3 F( D
6 A% {3 J  r3 [7 _. N" y: m$ a& l
摘自《Visual LISP for AutoCAD 2002——技巧与范例》
发表于 2007-12-20 15:19 | 显示全部楼层
好深奥啊 :( :(
发表于 2008-1-4 13:57 | 显示全部楼层
我认为最大的不同就是他们的开发平台不同吧,一个是用的LISP语句/ c% T6 ~5 @# Y8 U
一个用的是VB语句
, m1 j: H! W- k2 u但是两个最终的目的是一样的,都是为了简化画图程序提高智能性把
2 x8 b) P& r4 i: f6 @8 h% P  这个是我个人见解,大家见笑了
发表于 2008-10-16 14:59 | 显示全部楼层
了解一下
发表于 2008-11-21 22:42 | 显示全部楼层
工具不一样而已,都有优点
发表于 2010-1-21 18:28 | 显示全部楼层
学习到知识 了呀
发表于 2012-3-7 23:32 | 显示全部楼层
一楼悍啊,看过之后,收益匪浅啊!
发表于 2012-3-8 12:55 | 显示全部楼层
不错,顶一个,顶...
发表于 2012-3-28 15:17 | 显示全部楼层
一直在excel中使用vba,最近想在cad中试试,结果发现录制的宏竟然不能看代码?!!这个歌缺憾太致命了
发表于 2012-4-20 15:45 | 显示全部楼层
受教了
发表于 2013-4-17 15:28 | 显示全部楼层
刚开始学VBA,他们说要在自定义菜单中执行VBA程序必须要用lisp?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于|免责|隐私|版权|广告|联系|手机版|CAD设计论坛

GMT+8, 2026-5-13 20:28

CAD设计论坛,为工程师增加动力。

© 2005-2026 askcad.com. All rights reserved.

快速回复 返回顶部 返回列表