与时俱进,学用.NET开发AutoCAD
我开始使用AutoCAD已有13年时间,而开始学AutoCAD二次开发也有12年时间。因为工作的改变,不再做产品设计,所以近几年并没有再深入去研究AutoCAD的使用和开发。在AutoCAD 2005版之前,AutoCAD二次开发,基本分成三种类型,LISP,VBA/VB,ARX。
关于我对几种开发语言的看法,我在2005年第一期的《明经CAD杂志》上谈过:
http://www.mjtd.com/e-zine/ezine0501.HTM#501 我不知道Autodesk有没有意识到这一点。在近几个版本中,除了自2000版本引入了VisualLISP以及ActiveX编程技术外,近几个版本都在没有什么长进。具体如下:
1.做为VisualLISP,它是收购的产品。但在Autodesk收购后,这个产品就一直没有做进一步的改善。从2000版本到2006版本,还就那么多的新增函数,没有再增加了。界面也就变变颜色而已。界面的功能不完善的也不再去完善。开发人员一直在喊的那个DCL对话框功能太差劲,也一直不管。呵呵,收购不了ObjectDCL,自己至少也开发一些可视的界面出来,至少也应该在原控件的基础上增加对话框的可视编辑性能。几个版本都过去了,还是老样。
2.ActiveX,也就是通过对象模型接口编程。具体可通过VBA、VisualLISP或其它可该接口的软件来编程。这里最关键的是对象模型是否合理。从R14到2000,对象模型做了很大的调整,那是因为R14的对象模型只是个试验品。但从2000版本以后,对象模型就没有怎么动过。这里不是说一定要做大的改动,但至少一些用户都认为不好用或缺少的功能都应该在后续的版本中进行完善。但没有。如,大家都认为曲线编辑功能、修剪延伸功能、动态拖动功能,这些功能都不能在新版本中实现。而那么多的BUG,也不去修补。
3.2005版本引入了.net技术,有点跟着Microsoft的屁股走。但又是一个试验品。匆匆的推出来,不管是否完善。到了2006版本,从文档中也还没有反映出做了哪方面的改善。
到了2005版本,对象模型有点走样,把表格样式和绘图顺序都做为对象放到模型中,而表格样式的创建也只能通过词典来生成。而对于表格这样的对象,用程序已经很难完成对表格的生成的修改。就算在AutoCAD界面中操作,多数的表格编辑功能也只能通过右键菜单来完成,在命令行甚至不会出来任何提示。这对于AutoCAD来说完全脱离其对象的操作方式。越是高版本,用户的编程难度也大。
虽然说通过ARX可以做到一切,但毕竟做为普通的工程师需要的是易学好懂的语言来编一些平常实用和小程序。
4年过去了。二次开发语言,LISP没有增强,VBA差不多要灭亡,ARX保持不变,而.NET一直在加强。
我们不要再对LISP和VBA抱有任何期望,因为Autodesk不会在这些语言上再去投入,或者说自动桌子公司没有那么多精力去遍地开发。总有一天,这两个语言都会消失在我们的眼前,就算不消失,新的功能也无法用这些语言来实现。
AutoCAD .NET API 做为试验品在AutoCAD 2005就出现,而到了AutoCAD 2007后,才真正的得到发展。可以实现一些VBA无法实现的功能,如曲线处理、动态拖动等操作。而到了AutoCAD 2010后,已经做得比较完善。
.Net门槛比ObjectArx低,开发界面简单,不用掌握复杂的MFC,版本的对应在Net Api不明显,AutoCad2008就可以用VS.Net2003/5/8开发,不像ObjectArx严格要求对应AutoCad和VS.Net的版本。甚至高版本AutoCad的dll可以在低版本的AutoCad里直接使用,只要注意不同版本的托管函数库的变化,基本上07/08/09/10的dll可以混用,因为在二进制上几个版本是相似的(虽然不推荐这么做)。
.NET是Windows编程的潮流。.NET的出现就是为了代替以前的编程语言,在Windows中,就是微软说了算。
VBA将被VSTA代替,而VSTA并没有按照预期在AutoCAD 2010版中出现,可能也存在着整合的问题。而VSTA本身就是.NET的一个简化版,功能没有.NET强大。学会.NET,对付以后的VSTA就是小菜一碟。
.NET并不可怕。只要掌握方法。对于从LISP或VBA转移过来的朋友,开始的时候可以先用Com Api,在此过程中可慢慢熟悉DotNet的语法,然后慢慢的转向Net Api。
搞Lisp的转向C#可能要快些(它们都是用括号,只是一个用小括号一个大括号),搞VBA的转向VB.Net的可能性大些。
明经论坛虽然在2005年就开设了.NET版块,但却一直没有做强让大家从中受益。原因有多方面,一门新的语言需要长时间的学习才能上手和精通,而做为.net是一门全新的语言,国内并没有相关的资料。最重要的是我们没有会的朋友带领大家一起学习。
现在,.net版块的两位资深版主lzh741206和ahlzl 将会带领大家一起走向.NET。lzh741206和ahlzl 原来均精通VBA编程,在VBA版块一直非常活跃。现在,他们的精力将主要放在.NET版块。
.NET版块主要工作将会是以下几个方面:
1.写一些.NET的基础知识的文章,这些文章可能是原创,也可以是引用一些书本上的内容。这些内容一般都会经过我们的提练,更贴合我们的需求。
2.摘录或转贴国外优秀的文章,对部分文章会做翻译。
3.会做一些LISP或VBA向.NET转移的文章,以某些实例,让大家能够更清晰了解.NET的作用。
一门新的语言,带入门是关键。所以我们会在这方面多做文章,让更多的人加入进来。
一个版块,只靠版主是无法做好的,关键还得靠大家一起参与。特别是对于国外的一些优秀的文章,希望乐于参与的人一起参加翻译工作,让大家一起受益。
明经的宗旨是“你的需要,我们创造”,而做为明经网友的原则应该是“取之于明,用之于明”。只有大家参与,自己才会有更大的提高。希望在大家一起参与下,.NET版块能够热闹起来。
请点击进入 VB.NET/C# 与 ObjectARX 编程技术 版块
<p>知识改变命运 学习成就未来</p> 虽然LISP也仅是知道一点点,但还是要顶一下! <p>愿:<a href="http://bbs.mjtd.com/forum.php?mod=forumdisplay&fid=33"><font color="#000000">VB.NET/C# 与 ObjectARX 编程技术</font></a> 版块</p><p>越来越兴旺。</p> <p>看了明总的帖子,感受颇深<br/>相信每个随着mitd成长的朋友都会觉得这里有种亲切的感觉,起码我是这样觉得的<br/>这里有很多为他人排忧解难的人,有很多让人觉得异想天开而又合乎道理的众多解决方案<br/>让我回忆下在mjtd的朋友吧<br/>1、mccad:博学多才,我们的大哥<br/>2、龙龙仔:公认的高手,热心助人<br/>3、秋枫:大侠<br/>4、无痕:这个奇怪的家伙总喜欢顶着马甲到处闲逛,但又是一个总有奇思妙想的高手<br/>5、efan2000:神龙见首不见尾<br/>6、ahlzl: 为人师表,耐心助人,又因为总是长不大,所以不断学习<br/>。。。。。。<br/>太多了就不一一列举:)<br/>其实我在早就因为工作的原因逐渐远离了AutoCad二次开发的行列,然而对于二次开发的热情又让我不知不觉的回到了mjtd<br/>回想在mjtd的日子,总是让人激动的<br/>在这里,我懂得了要索取就要有付出<br/>在这里,我从菜鸟开始慢慢成长<br/>在这里,我受到了很多热心朋友的帮助和支持</p><p>朋友们,让我们也为mjtd,为mjtd的朋友,也为自己做些什么吧<br/>让我们真正成为时代的弄潮儿</p><p>xsfhlzh随笔</p> 学.NET 本帖最后由 作者 于 2009-6-25 10:28:50 编辑 <br /><br /> <p>偶也是最近开始学。。。</p><p>希望大家一起来。。。</p><p>人多好交流</p> <p>会做一些LISP或VBA向.NET转移的文章,以某些实例,让大家能够更清晰了解.NET的作用。</p><p>嗯,这样确实不错,强力支持!</p> <p>很幸运的来到了这里!</p> <p>明总对新技术总是锲而不舍,佩服!本网站是个扎实的平台,一直无私地为网友服务着。</p><p>对于.NET和VSTA,本人亦很关注,但没有尝试过。不是不需要,而是有点学不动了。</p><p>支持倡议,祝愿新板块越办越好!<br/></p>