CAD二次开发语言简介

摘要:
CAD二次开发有许多不同级别的语言和库。CAD引入了这种语言,并向其中添加了相应的函数库,该函数库成为命令行使用的AutoLisp。VL在CAD中可以看作是CAD命令的集成,是一种脚本语言,并由CAD程序提供了一个编写环境。ARX是一个基于ADS、使用C++语言开发的面向对象环境。在CAD2006之前,只能使用C++语言和VC编译器来生成ObjectARX程序。Lisp程序具有最佳的适用性。即使是为AutoCADr12开发的程序也可以在CAD2007中使用。我个人建议,那些试图从事CAD二次开发的人应该首先好好看看天正的那些东西。

CAD二次开发,有很多不同层次的语言和库可供选择。

首先是VisualLisp和AutoLisp。Lisp是一门历史悠久的函数式编程语言,很多概念和C这种过程式语言不一样,据说他在人工智能等方面有广泛的应用。

CAD引入了这种语言,给他添加相应的函数库,就成了命令行使用的AutoLisp。在此基础上再增加关于对话框和窗口界面的库,就是VisualLisp,简称VL。VL在CAD中可以视为CAD命令的整合,是脚本语言,而且由CAD程序提供了编写环境。因此上手相当容易,便于编写,调试也很方便。

不过由于是脚本语言,就有两大缺陷。第一是速度,当程序规模很大或是操作的对象数量过多时,你会明显感觉到迟钝。第二是功能。如果有什么功能是命令本身做不到的,那VL也做不到。譬如关于自定义对象、内存操作、数据传递之类,往往要通过别的方法解决。所以我个人认为Lisp适用于把现有命令组合成一个新命令来使用,尤其是存在大量重复操作的时候,用来做批处理非常好。唯一让人感到不适的是,由于Lisp语言本身的语法要使用大量的圆括弧,当嵌套层次较深时,往往会在括弧的配对上发生问题。

第二大类是使用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奇怪语法的开发者来说,这是不错的选择。

此外,从目前的趋势来看,AutoDesk有全面转到.net平台的趋势,ActiveX和VB看来也将会被他的继任者取代,似乎是VB.net/C#和ObjectARX Managed wrapper classes的组合,具体情况观望中。

第三大类就是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程序了。

用ARX所编出的程序,在载入后就与ACAD在同一代码区,共享全部数据区,能够直接对CAD内部的数据做任何的操作,因此具有极高的执行效率和强大的功能。即使AutoCAD系列软件自身,在编制完成了程序的基本功能之后,其他大量的内部命令其实也是用ARX实现的。你可以通过察看安装好的CAD程序目录中的那些数目众多的arx文件来领会这一点。这就充分说明了ARX的彪悍,不需要再举例子。

天上不会掉馅饼,这个方式的代价就是难度提高了。首先C++语言本身就很复杂(VB.net和C#也不方便到哪里去),再配上复杂度不相上下的ObjectARX库,如果要写出切实可用的程序,还要深入了解CAD本身的结构。即使是开发很小的功能,也要有很多的工作要做。调试的工作,需要启动VC和CAD这两个大家伙,数据量大的时候会让你发狂的。丰厚的回报还有高风险相伴,由于已经和CAD融为一体,ARX程序的错误会直接影响到CAD。象内存泄漏这种常见而又高危的情况,很有可能会把CAD直接搞垮。所以对于程序的安全有着更高的要求。

除了语言、功能、编写和调试的难度之外,这三种方式还有CAD版本匹配的问题。Lisp程序的适合度最好,即使是为AutoCAD r12开发的程序,在CAD2007中仍然能够使用。而ARX则正相反,为CAD2002编写的程序就已经不能在2004下运行了。为旧版CAD编写的ARX程序的源代码可以不需要修改或修改较少,但必须连结新版本的ARX库重新编译,才能被新版本载入运行。而且,不同版本的ARX库还指定了不同版本的编译器。譬如,CAD2000/2002版应使用VC6,CAD2004/2005就需要使用VC.net 2002,而CAD2007则需要VC.net 2005。而VB则介于这两者之间。这个问题往往会把新手搞糊涂,必须参阅相关开发文档。

开发中使用什么语言,并不完全决定于我们。规模、资金、时间甚至用户的习惯才是考虑的关键。大型系统往往综合运用这三种方式,天正软件就是一个典型。我个人建议尝试搞CAD二次开发的人都该先好好看天正的那些东西。

原文链接:http://1001night.blogbus.com/logs/3105879.html

免责声明:文章转载自《CAD二次开发语言简介》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇确认oracle数据库错误日志文件位置Sed命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

怎么将CAD转PNG格式?这两种方法值得收藏

在从事相关CAD工作的小伙伴们都知道,CAD中不光需要绘制各种各样的图纸,还需要根据工作的需要来进行图纸格式的转换工作。那有的时候就需要将CAD转换成PNG格式的图片进行使用。那怎么将CAD转PNG格式呢?具体操作如下: 一、 工具转换 操作步骤: 1.首先将要使用的迅捷CAD转换器进行启动,软件进入到CAD版本转换器的操作界面中,鼠标点击左侧功能栏中的...

Qt中使用ActiveX控件

(转自:http://blog.csdn.net/tingsking18/article/details/5403038) 在Qt中使用ActiveX控件 Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件,并且也开发基于Qt的ActiveX控件。ActiveQt包含了两个组件QAx...

c#生成cad缩略图或者图片

struct BITMAPFILEHEADER{public short bfType;public int bfSize;public short bfReserved1;public short bfReserved2;public int bfOffBits;}public static System.Drawing.Image GetDwgImag...

AutoCAD自动加载DLL文件的方法

让CAD打开以后自动加载DLL文件的步骤如下:      1.找到你CAD目录的安装目录的启动支持文件,例如:C:\Program Files\AutoCAD 2006\Support\acad2006.lsp      2.打开acad2006.lsp文件 ,在最后输入(command "netload" "E:\\PowerSupplyManager\...

[.NET] 使用 .NET Framework 開發 ActiveX Control

[.NET] 使用 .NET Framework 開發 ActiveX Control (1)–背景知識 ActiveX的歷史與技術基礎 只要是有八年以上程式開發經驗的開發人員,多多少少都會聽過ActiveX控制項(Control)這個東西,這個是只存活在Internet Explorer上的可程式化元件(Programmable Component),它...

[精品]CAD批量处理工具

CAD批量处理工具是基于AutoCAD二次开发的批处理插件。将程序加载到CAD中,使用自定义的Lisp代码就可对多个文档进行批量操作。 1.文件说明 CAD批量处理工具批处理程序包含两个文件:一是基于VBA的程序,二是基于Lisp的程序。 2.安装运行 (1)将程序拷入CAD安装路径下的Support文件夹下,如E:Program FilesAutoC...