CAD二次开发,有很多不同层次的语言和库可供选择。 ^w@%cVh
rq/yD,I,
首先是VisualLisp和AutoLisp。Lisp是一门历史悠久的函数式编程语言,很多概念和C这种过程式语言不一样,据说他在人工智能等方面有广泛的应用。 iohop(LZ
kHghPn?8]
CAD引入了这种语言,给他添加相应的函数库,就成了命令行使用的AutoLisp。在此基础上再增加关于对话框和窗口界面的库,就是VisualLisp,简称VL。VL在CAD中可以视为CAD命令的整合,是脚本语言,而且由CAD程序提供了编写环境。因此上手相当容易,便于编写,调试也很方便。 .
y-D16V
~ Ei $nV
不过由于是脚本语言,就有两大缺陷。第一是速度,当程序规模很大或是操作的对象数量过多时,你会明显感觉到迟钝。第二是功能。如果有什么功能是命令本身做不到的,那VL也做不到。譬如关于自定义对象、内存操作、数据传递之类,往往要通过别的方法解决。所以我个人认为Lisp适用于把现有命令组合成一个新命令来使用,尤其是存在大量重复操作的时候,用来做批处理非常好。唯一让人感到不适的是,由于Lisp语言本身的语法要使用大量的圆括弧,当嵌套层次较深时,往往会在括弧的配对上发生问题。 Jr
,;>
XSe=sHEI
第二大类是使用ActiveX和VB。ActiveX是Microsoft提出的一组使用COM(Component Object Model,部件对象模型)使得软件部件在网络环境中进行交互的技术集。ACAD使用Acitvex把数据传送给ActiveX程序,程序处理后再传回ACAD。这个过程有点像浏览器浏览动态网站。AcitveX与具体的编程语言无关,因此理论上说可以用任何一种支持他的语言来编写,但通常大家选择VB语言。VBA是VB的特殊形式,他将VB植入到应用程序中。ACAD包含的VBA能够和CAD共享地址空间,而独立的VB则需要通过接口完成。这种方法在编写上比Lisp复杂,调试也困难。但速度快,功能更强劲。但是在某些对速度要求相当高的运算和涉及CAD内部的应用上仍然会显得力不从心。对于熟悉VB语言又不想学习Lisp奇怪语法的开发者来说,这是不错的选择。 6ryak!|[
qo90t{|c
此外,从目前的趋势来看,AutoDesk有全面转到.net平台的趋势,ActiveX和VB看来也将会被他的继任者取代,似乎是VB.net/C#和ObjectARX Managed wrapper classes的组合,具体情况观望中。 :0j?oY~e
J!v3i*j\
第三大类就是ADS ARX 和ObjectARX。ADS是AutoDesk从ACAD R11开始提供的C编程环境。它具有C的一切优点,又能操作CAD。但他和ActiveX类似是通过管道通讯的。ARX(AutoCAD Runtime eXtension)是在ADS基础上发展的面向对象的环境,使用C++语言。最终ARX进化为ObjectARX,他完全面向对象,并且是以dll(动态链接库)的形式共享CAD的地址空间。由于先前的ARX已被包含为子集,人们也就简称ObjectARX为ARX。在CAD2006以前,只能使用C++语言和VC编译器来生成ObjectARX程序。但目前已经可以使用VB.net C# C++等语言配合VisualStudio.net编译器来生成ARX程序了。 1EO7H{E=
8>2.UrC
用ARX所编出的程序,在载入后就与ACAD在同一代码区,共享全部数据区,能够直接对CAD内部的数据做任何的操作,因此具有极高的执行效率和强大的功能。即使AutoCAD系列软件自身,在编制完成了程序的基本功能之后,其他大量的内部命令其实也是用ARX实现的。你可以通过察看安装好的CAD程序目录中的那些数目众多的arx文件来领会这一点。这就充分说明了ARX的彪悍,不需要再举例子。 b8`)y<