用.NET执行AutoCAD自带命令

嘎子 AutoCAD二次开发, C# 2016-02-20 1,912 次浏览 , , , 2条评论

看到网上很多文章说什么以前用其他语言时执行AutoCAD中自带的命令非常方便,而.Net使用时非常不方便。这样说也不算错,因为在AutoCAD 2015之前,.Net自带的执行命令的方法只有一种,而且还是异步执行的,非常鸡肋。

先总结一下现在.Net中可以使用的执行AutoCAD中的命令的5种方法:

1、托管类Document中的SendStringToExceute方法

2、COM类中Document的SendCommand方法

3、通过P/Invoke调用acedPostCommand方法

4、通过P/Invoke调用ads_queueexpr方法

5、托管类中的Editor的Command方法(从AutoCAD2015才开始支持)

这里我会详细介绍1,2两种方法,3,4可以参照Kean大神的文章:http://through-the-interface.typepad.com/through_the_interface/2006/08/calling_command.html。

第5种方法也非常简单,只不过要在AutoCAD 2015中才能使用,如果你用的是AutoCAD 2015那么恭喜你,你直接使用方法5就可以了,非常方便。具体我也不详述了。

第一种方法:

这种方法之所以说鸡肋是因为命令是异步执行的,也就是说SendStringToExecute只是将命令发送到AutoCAD中,不会等命令执行,而进行后面的步骤。直到C#代码执行完毕,AutoCAD才开始执行命令。(可以参照http://www.360doc.com/content/12/0909/14/8463843_235167127.shtml)

这当然在一些情况下也非常好用,但是不能满足我们的要求,有时我们希望命令同步执行,也就是说等待AutoCAD执行完“QSAVE”命令后才执行下一步。那么第二种方法就派上用场了。

代码也非常简单,但由于此方法是使用.NET COM互操作程序集能访问的COM Automation库的SendCommand方法,所以我们也要增加一些引用才行。

需要添加“AutoCAD”和“AXDBLib”两个COM引用,但我在添加引用时遇到如下问题:


那个AutoCAD 2010 Type Library就是AutoCAD的引用,添加上去就可以了,但是大家反映AXDBLib是AutoCAD/ObjectDBX Common 18.0这样一个COM库我的没有,这让我非常伤脑筋。

当然这个也可以通过文件添加,AutoCAD/ObjectDBX Common 18.0 类型库 axdb18enu.tlb,位于 c:program filescommon filesautodesk shared 目录中。通过浏览,找到这个文件就可以了。

你以为到这里就讲完了吗?你太天真了。

如果大家实践会发现,用上面第二种方法命令依旧是异步执行的。。。太悲剧了。事实时我们只要用命令做一些设置就可以让SendCommand异步执行。

上面一段代码就会先画圆再出现警告。

而这一段代码就会先警告再画圆。

好了,就到这里吧,我觉得这些就够用了。至于具体哪种方法好,大家自己在实际使用中自己体会吧。

原创文章,文章首发于:Riley Ge (@rileyge) — Steemit

原创文章,转载请注明: 转载自TsonTec:测量解决方案提供者

本文链接地址: 用.NET执行AutoCAD自带命令

相关主题

说点什么

2 评论 在 "用.NET执行AutoCAD自带命令"

提醒
avatar
排序:   最新 | 最旧 | 得票最多
奇虎分享网
游客

这个文章写的好,转走了!

中土生活红宝书
游客
给大家一个第五种方法的一个示例: using System; using System.Runtime.InteropServices; using Autodesk.AutoCAD.Applicat… 阅读更多 »
wpDiscuz
回顶部