AutoCAD(Auto Computer Aided Design)是美国Autodesk公司研制开发的一款计算机辅助设计软件,它不是一款简单的绘图工具,而是一个复杂的计算机辅助设计系统。我们可以根据他灵活的开放性对其进行二次开发定制,让它更加适用于某一具体的设计领域。 中文名 AutoCAD 二次开发 外文名 AutoCAD Development System 目 的 提高效率建立适合本行业的平台 ADS 已经淘汰的一种开发AutoCAD环境 AutoLISP 语言的优点是语法规则简单 VisualLISP 引入面向对象的LISP开发环境
从1986年发布AutoLISP以来到现在的二十余年来,Autodesk公司推出了AutoLISP、ADS、VBA、ARX、ObjectARX、VisualLISP、ObjectARX.NET、JavaScript等开发方式。本章就是对上述开发方式进行讨论分析从而找到高效开发AutoCAD的一种方式。
AutoCAD是目前在Windows和MAC系统中应用最为广泛、使用人数最多的CAD软件。但它只给我们提供了基础的CAD功能,如果我们想完成具体项目设计,就必须根据数据一笔笔绘制出图形,这样一旦在设计完成之后,要更改局部图形则需要重复原来的全部内容。造成了大量工作量的浪费。 如果使用AutoCAD的开发系统,我们就可以将以上的过程用程序编制出来,在需要设计时,只需一个命令就可以运行这个程序,自动完成绘图过程。显而易见,这不仅大大提高了设计效率,而且,还可以通过定制来完成某些专业化的模块,甚至大型设计软件,比如测绘行业的南方CASS软件、建筑行业的天正CAD软件等均是用AutoCAD开发系统实现的。 因此,要想让AutoCAD真正使用于某一具体领域,或让其经常完成一些重复性的工作,则必须利用AutoCAD的开发系统对其进行二次开发.
从AutoCAD 2.18开始推出AutoLISP开始到现在,我们所能使用的开发工具主要有:AutoLISP、VisualLISP、VBA、COM外部接口、ObjectARX、ObjectARX.NET等开发方式供用户选择。下面开始对上述开发方式进行简要介绍: AutoLISP和Visual LISP
AutoLISP是进行对AutoCAD二次开发最早的API,它是人工智能语言LISP的一个分支.主要用来自动完成重复性任务,进行客户化开发和编制AutoCAD菜单以及通过简单机制为AutoCAD扩充命令,能够有机的和AutoCAD结合在一起,它语法简单容易上手,到目前仍有很多的活跃开发用户。但是由于它是解释型API而不是面向对象的编程语言,使它的效率低下,由于执行的是源代码文件所以导致保密性能不高很难用它开发大型的应用程序。 在AutoCAD R14.01中,Autodesk公司首次提供了一种新的LISP编程工具:Visual LISP,它是一种面向对象的开发环境,是AutoLISP的扩展和延伸。 在AutoCAD2000中,Visual LISP被集成到了AutoCAD环境之中。Visual LISP是一种半编译的API。由于可以被编译所以大大提高了运行效率和安全性。同时它又与AutoLISP完全兼容,又提供了AutoLISP的所有功能,同时它又能够访问AutoCAD的多文档环境,以及对COM/ActiveX技术的支持和反应器等。VisualLISP IDE同时提供了完整的编辑环境使得用户可以对代码进行调试跟踪、源码语法检查、括号匹配、函数提示等工具,方便创建和调试LISP程序。由于VLISP集成于AutoCAD内部,而且随AutoCAD升级而升级所以兼容性比较好,这也是LISP深受广大编程爱好者使用的原因。 但在进行大数据的计算处理方面,Visual LISP不能很好的胜任这项任务,这使得开发大型数据运算的程序仍有一定困难。 ADS、ARX和ObjectARX
ADS(AutoCAD Development System)是Autodesk公司最早在AutoCAD R11中提供的C语言编程环境。ADS除可使用标准C的函数外,又增加了一组专用于对AutoCAD进行操作的函数。由于ADS程序具有C语言的一切优点,因而它曾是开发AutoCAD R11、AutoCAD R12应用程序的主要工具。用C写就的ADS程序,可在所有支持AutoCAD平台上进行源代码移植。只需使用普通的C语言编译器就可以编译生成ADS模块,与ADS库和标准C库链接后生成可执行文件,装入AutoCAD后即可运行。但是ADS和AutoLISP一样,内在结构不是面向对象的,用AutoLISP解释器加载和调用,利用IPC与AutoCAD通讯。 ARX(AutoCAD Runtime eXtension)是在ADS基础上发展起来的一种面向对象的C语言编程环境。由ADS到ARX的变迁就像C到C++的转变。ARX与老式的ADS及AutoLISP的最大差异在于ARX应用程序是动态链接库,共享AutoCAD地址空间,可以对AutoCAD进行直接函数调用,避免了IPC的系统开销和由此引起的性 能下降。因此那些频繁与AutoCAD通讯的应用程序在ARX环境下的运行效率明显优于老式ADS或AutoLISP环境。 ARX最早是在AutoCAD R13中提供的,但在AutoCAD R14中,ARX就被ObjectARX所代替。同时原来的ADS库函数全部被包含在ObjectARX中,将ADS函数合为单一的库就形成了ADSRX。ADSRX库已纳入到AutoCAD的总体结构中,因此它与其他ObjectARX库一样,能共享AutoCAD地址空间。 到了新世纪,传统意义上的ADS开发环境的概念已经不复存在,且ADSRX已成为了ObjectARX的一个子集,因此,ObjectARX是包含了ADS、ARX和ADSRX的一种综合的C/C++开发环境。ObjectARX的最大特点是引入了面向对象的编程机制,用户可以根据规则定制实体也是ObjectARX的一大亮点。
利用微软的ActiveX技术
自AutoCAD R14起,提供了ActiveX Automation形式的API。ActiveX技术可将各种二进制应用程序组件集成一体。它可采用多种编程方式例如:VBA构造一种或多种与应用程序独立的宏编程。提供Automation服务的软件组件通过标准接口能够对外开放它的特定功能。 正是由于AutoCAD拥有ActiveX接口,因此,用户可以容易的用各种AciveX编程语言来定制开发AutoCAD。 AutoCAD包含的VBA能在进程内访问AutoCAD的对象模型。亦可以通过独立 的VB进行编程,但是VB与ActiveX的接口需要通过IPC驱动AutoCAD,所以作为ActiveX控件的VBA比VB具有明显的性能优势。 特别要强调的是,ActiveX与AutoCAD交互操作很慢,若需要在外部程序中一边运算一边交互操作的重复迭代,将耗费大量时间,如同死机 值得注意的是,从AutoCAD 2010版本开始,VBA不在随AutoCAD一起安装。如果想要在机器中运行VBA程序必须登录下面的网址进行下载方可运行。
利用ObjectARX.NET进行开发
在AutoCAD 2005 版本中Autodesk公司推出了用.NET开发AutoCAD的编程接口。它的实质是通过Managed C++/CLR技术对VC++的ObjectARX进行封装。到目前的AutoCAD 2015十年来Autodesk公司已经完成对大部分ObjectARX编程接口的封装。这种编程方式难度适中,能够访问大部分的编程接口(除了自定义实体);但是,由于AutoCAD的.NET接口是在不断的完善过程中导致了在低版本上不能够使用新增的功能。
比较各种开发AutoCAD的编程接口,需要从以下几个方面进行考虑: 1. 速度:直接与AutoCAD通讯的API比利用IPC进行通讯的API在速度方面要快。编译型的API比解释型的API速度要快。因此,ObjectARX的速度最快,Com接口开发的外部程序速度最慢。 2. 稳定性:运行稳定性反映出因程序可能出现的严重错误所导致的危险。采用LISP开发的程序一旦失败或崩溃,并不危害AutoCAD自身进程;而由于ObjectARX应用程序共享AutoCAD的地址空间,所以其一旦运行失败,AutoCAD进程随之崩溃。 3. 性能:ObjectARX的应用程序能在运行期间实时扩展AutoCAD,共享AutoCAD地址空间,甚至为所欲为,因此性能无比强大,以至于AutoCAD自身的许多功能模块都是由ObjectARX进行制作。相反,解释型API如AutoLISP仅被限用于使用静态的AutoCAD命令集提供结构化函数库 4. 技术难度:AutoLISP和VBA均是解释型语言,方便易学,开发周期短。许多程序员或一些技术人员都在使用它们。相比之下ObjectARX依赖于C++语言,它必须经过严格控制的编译、链接才能生成应用程序。这就需要编程人员需要积累经验,这样才能去发现问题从而解决问题。 5. 保密性:编译型程序要比解释型保密性要好,保护了开发人员的著作权,解释型语言往往保密性能不高。导致用户误操作源码造成不应有的错误。 另外:虽然.NET开发出来的DLL文件是编译后的程序,但是由于其程序可以反编译回源码造成了代码的保密性差,也是不容忽视的问题。 相比之下,如果以前已熟悉使用LISP语言的朋友,则可选用VisualLISP。 如果用户只想利用开发一些简单的周期性短的应用程序,则可以依个人爱好和经验选择Visual Basic和VisualLISP。若用户有较好的C++基础和AutoLISP函数基础,同时又要开发速度和性能要求都很高的应用程序或大型CAD应用软件,则要使用ObjectARX。
首先你需要阅读AutoCAD 2014 产品的新特性,这里讲的是对于AutoCAD 2014开发人员来说有哪些新东西。
AutoCAD 2014与AutoCAD 2013二进制兼容
原先基于AutoCAD 2013开发的应用程序不用重新编译就应该能在AutoCAD 2014上运行,当然.net framework还是用的.net 4.0. DWG文件格式也和AutoCAD 2013一致,所以,放心大胆是升级到AutoCAD 2014吧。
安全特性
在AutoCAD 2014中加载程序集,你可能会看到类似下面的安全警告对话框。
image
解决办法有几个:
使用Autoloader 加载你的程序,就是Bundle的方式。 为你的程序进行数字签名,注意是数字签名Digitally signed不是.net 里面的强名strong name。 把你的程序所在目录加入到TRUSTEDPATHS (也可能是TRUSTEDDOMAINS)系统变量中去。 来个狠的,把SECURELOAD设置为0.不过最好别这么干。 JavaScript API
AutoCAD 2014中最大的亮点就是提供了Javascript API,从而使得熟悉JavaScript的Web开发人员也可以进行AutoCAD开发了。AutoCAD 的JavaScript API和AutoCAD WS JavaScript API是一致的。也许经验老道的C++或.net 程序员会问,我C++用的挺好的,为什么要用JavaScript?大家知道JavaScript和Web开发有着天然的联系。有了JavaScript API,我们就可以把用HTML网页来做程序界面,这可比C++/.net要方便的多,而且能做出各种花样来。另外界面逻辑用JavaScript来实现也可以放在服务器端,以后你的程序更新就不用频繁的跑到客户那里安装了。 现在的JavaScript API提供的下面几个方面的功能:
用户输入 临时图形 Jig拖拽 视图控制 图形对象的事件捕捉 应用程序对象等等 你可以使用AutoCAD 2014中提供的新命令WebLoad来加载你的页面,也可以开发一个很小的桩Stub模块来加载你的页面。AutoCAD 2014中PaletteSet.Add()多了一个重载,他接收一个url参数,从而加载一个web 页面。
既然是web页面那估计会放在某个web站点上,上面提到安全性是引入的系统变量,你需要把你的域名加入到TRUSTEDDOMAINS系统变量中去。比如通过Lisp代码:
(setvar “TRUSTEDDOMAINS” (strcat (getvar “TRUSTEDDOMAINS”) “;http://junqilian.cnblogs.com”))
JavaScript API还有好多好玩儿有用的东西,后续慢慢讲。
Geolocation API
你看过AutoCAD 2014产品新特性,在AutoCAD 2014中可以把地图插入到图形中,从而使图形有了地理参照。新的类主要就是 GeoLocationData。 不过Bing Map在天朝特殊国情下基本上处于不可用状态,这里先一笔带过吧,谁叫咱有特色呢?
VBA 7.1
以前和大家说过多次要把VBA的程序一致到.net,这些工作并没有白费,比较.net比VBA更Professional一些,呵呵。不过如果你实在不想移植就非想用VBA,那有个好消息,现在VBA又回来了,并且提供了64位的VBA。
这是AutoCAD 2014中和开发人员相关的新特性简单概览,亮点在于JavaScript API可以让你飞上云端了。如果想了解详细一点的,可以看Kean的博客,然后下载AutoCAD 2014试一下。
出处:http://junqilian.cnblogs.com
AutoCAD 2014 之Javascript编程初探
(一)简介
Autocad 2014的一个重要特性,就是从这个版本开始支持Javascript编程了。
1. 重要参考资料
1)Autocad Devblog,应该是官方开发人员的公用blog
http://adndevblog.typepad.com/au … n-autocad-2014.html
这篇文章中的附件是一个开发视频及相关例子资料,是非常好的学习资料。
2) JavaScript Application Programming Interface (API) for AutoCAD
http://www.autocadws.com/jsapi/v1/docs/
官方的API资料,不过从其中可以看出,现在其内容还是比较简陋的,正如第一版.net时候的帮助一样
3) Kean的相关文章
http://through-the-interface.typ … terface/javascript/
Kean是Autocad公司的二次开发专家,第一个官方附件中的好些例子其实就是出自Kean之手
其中的几篇博文
缩放显示物体到最大化
http://through-the-interface.typ … ing-javascript.html
Jig圆
http://through-the-interface.typ … efined-command.html
等,均是非常好的学习资料
本人研读了以上文献后入门。
2. Javascript 编程的优缺点
由于只是粗浅了解Javascript编程,以下仅为本阶段个人体会
1)方便网络编程,也可较方便地可以利用网络Javascript库。
这个Kean在其文章中也提到了希望引入Paper.js及leap.js等有趣的2d图形库。而本人也通过尝试d3.js库了解了利用网络库编程的优点,因此,如box2d、Processing.js、Raphaël、Math.js等图形库和物理引擎库等。熟悉Javascript的朋友自然可以更得心应手。而且,大家可以创建自己的函数库,放置于网络,及时更新。
帖子后文将介绍关于d3库用于delaunay图形绘制的代码。近两年,html5发展迅猛,基于html5的Javascript库如雨后春笋,这也必将对其他相关领域带来活力。
部分Javascirpt库可参见
http://www.comsharp.com/GetKnowl … mothyPage_K741.aspx 等
2)可以很好地利用html界面。
Html+div+css是现在网络上流行的页面布局,善用div可以得到非常漂亮的页面。Javascript和.net的混合编程,可以通过.Net在Palette中引入html界面,这将使得页面布局更加简单和丰富。后文将以一个简单的例子来说明其应用
缺点:
由于并非很深入的研究,此处说法或许有误。
个人觉得Javascript毕竟是脚本类程序,可能在运行效率上比之Arx或者.Net有所不如。
另,由于Javascript在这一版本中首次引入,因此其函数有缺失。上次咨询了第一个文献的作者Philippe Leefsma后确认,Javascript API在本阶段并没有开放太多的物体数据库的操作函数(大概只是探路版本吧),因此比如画圆、获取多义线顶点等内容无法直接用Javascript进行操作,必须自编.Net程序或者ARX程序用于扩展Javascript函数,现阶段还是比较麻烦。
下面本人以3个感兴趣的几个自学例子探讨一下JavaScript的应用,仅当抛砖引玉。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/203505.html原文链接:https://javaforall.cn