我该选哪一种
hzh2000发表于2004-3-6 19:54:00static/image/common/back.gif一个都不好用。lisp、VBA语言先天不足;ARX不够直观;若AUTOCAD支持DELPHI、C++之类的面向对象技术的语言,那才是福音呢!<BR>听他这么说,我不知道学LISP好不好,语言先天不足是什么意思呢?手头有一本LISP的教材,可是还没有学。我想初学者先掌握一种再说吧,会一种了其它的自然触类旁通了?对吧??? 本帖最后由 作者 于 2005-2-10 9:58:05 编辑 <br /><br /> 为了工作和课题,着实研究了一番acad的二次开发,看到这个问题不吐不快。<BR> 从acad V2.18开始,autolisp一直伴随着acad走到到今天,与acad的关系可以说两小无猜、亲密无间。autolisp语言规则简洁,能够直接访问图形数据,对于简单的程序,如图形对象的交互操作,acad命令的组合、重复执行,autolisp可以说是干脆直接、手到擒来。用其开发的程序向上兼容性好(在低版本acad平台上开发的程序通常可以直接运行于更高版本的平台上)。<BR> 但autolisp不是一种面向对象的语言,仍然沿用自顶而下的设计思想。解释型语言,运算速度慢,不适用于密集型计算。相对于其它高级语言,autolisp语言的语法结构有较大的差异,令初学者难以适应。其对话框窗口控件单一,与用户交互功能太弱,与VB、VC、Delphi等可视化编程语言相比,autolisp的DCL简直就是小儿科,DCL至今无法实现可视化编程。<BR> auotlisp发展到visual lisp(vlisp一方面指的是集成开发环境,另一方面指扩充加强后的autolisp语言),虽然在对话框设计方面没有设么改进(简直是愧对"Visual"一词),但是大大扩展了autolisp函数,增加了对ActiveX的支持,具有了与其它程序通信的能力,增加了反应器,增强了交互性,实现了代码的伪编译。<BR> 从R14.01版acad开始支持VBA。VBA才是完全真正意义上的可视化编程,拥有数量丰富、功能完善的窗体控件,面向对象模块化编程、强大的数据库访问管理功能,同支持VBA的其他应用程序(如word、execel等)数据共享交互能力,创建自己的acad工具条。并且,VB拥有广泛的“群众基础”,如果是一个VB爱好者,将不需要在语言本身上花费太多工夫去学习适应。<BR> 但是,VBA是通过AutoCAD ActiveX Automation接口与AutoCAD内部对象建立联系的,个人认为Activex对象结构并不是很适用于用来描述acad的动作行为,例如,直线对象拥有拷贝、删除等方法,长度、角度等属性,被修改等事件,假如这还算容易理解,而求两条支线的交点,用autolisp描述为“求两条直线的交点,参数为直线1、直线2”,即思考的核心是求交点,作为参数的两条直线是平等的;而用VBA描述为“直线1对象的求交点方法,参数为直线2”,思考的核心为直线1。因为直线对象拥有求交点的方法,所以我们实现了这个目的,如果没有呢?也许我们还没有深刻的适应理解面向对象的编程方法,但至少这种方法与我们操作ACAD绘图时的思考习惯是不相符的。<BR> 从另一个方面来说,ActiveX虽然不能完美描述acad动作行为,但是为acad与其他windows应用程序的沟通开辟了广阔的途径,理论上支持ActiveX的编程语言,如VB(VB.net)、Delphi、Java都可以用来对acad进行二次开发,vlisp也提供了对ActiveX的支持。本人下一目标即是尝试使用Delphi开发acad。<BR> 除了在acad图形操作方面明显不足,大多数方面vba长于autolisp,应当是代表着今后发展方向。<BR> arx目前还没有涉及,但原理大概是懂得的。arx是以C++为基础的面向对象开发环境及应用程序接口,只支持Microsoft Visual C++编译器。arx应用程序与ACAD共享地址空间,之间的通信更加直接高效,但是程序一旦存在缺陷,易引发AutoCAD甚至是系统崩溃。在不同版本ACAD平台上开发的ARX程序几乎不能通用。其对使用者的素质要求较高,首先必须熟练掌握C++,并对操作系统有一定了解,是作为专业开发的首选工具。arx功能强大,可以完成前两种方法无法胜任的任务,适于开发大规模、综合性应用程序。
花了点时间写了这么多字,希望对初学者有所帮助。
再次复读半年前的写下的东西,又有一点心得 AutoCAD使用到一定阶段,可能不再醉心于那些奇技淫巧,画图常用的也就十几个、二十来个命令,有人认为AutoCAD只是一个绘图的工具而已,但是,几乎没有人为画图而画图,我们要做的是如何将自己专业的设计计算部分与图形结合起来,如何将数据库与图形结合起来,只有这样,AutoCAD才不会仅仅被当做一个绘图工具,才会真正成为“计算机辅助设计软件”。个人认为在这个应用层次上,界面丰富、与用户交互能力强大、支持面向对象的VBA比VLISP更能满足开发者的需求。