外部.NET程序与AutoCAD交互

外部.NET程序与AutoCAD交互

ID:38682645

大小:135.23 KB

页数:12页

时间:2019-06-17

外部.NET程序与AutoCAD交互_第1页
外部.NET程序与AutoCAD交互_第2页
外部.NET程序与AutoCAD交互_第3页
外部.NET程序与AutoCAD交互_第4页
外部.NET程序与AutoCAD交互_第5页
资源描述:

《外部.NET程序与AutoCAD交互》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、外部.NET程序与AutoCAD交互外部.NET程序与AutoCAD交互(AutoCAD)开发者一般要么将功能集成到AutoCAD(通过其扩展体系来添加命令、用户界面元素、对象等),要么通过程序来驱动AutoCAD,使通用的任务自动化。这两种方式的界线有时候不是那么明显,我今天要关注的是后者。为了后面的解释方便,我先介绍一下两种应用程序的交互。一、线程外此种情况下,我们需要在两个独立的可执行程序之间进行通信。就好比如我需要一个.EXE的执行程序来驱动AutoCAD,我们就需要找到某种方式来启动AutoCAD并且与之通信-最典型的就是使用COM技术或更早的DDE技术。这种通信方式,确切地说,是

2、通过进程间通信IPC(Inter-ProcessCommunication)来完成,这种方式在传输大量数据时是非常低效的。这就是早期的ADS和外部VB应用程序运行很慢的原因。二、线程内当程序代码被编译成DLL,不管是VB建立的ActivexDll,ObjectARX模块,还是.NET的程序集,程序与AutoCAD主线程之间的通信都要高效得多-数据结构可以通过指针来传递或直接引用,而不是通过低效的IPC编组来发送数据信息。目前AutoCAD大部分的APIs都是被设计用于"线程内"的-包括LISP,ObjectARX,和.NETAPI。因为.NETRemoting的实用性,很多人常希望或期盼着A

3、utoCAD能通过.NET从线程外部驱动,不过.NET的托管API并不是这么设计的-它其实就是对ObjectARX的一个封装,其运行是以通过指针对内部对象的直接访问为基础的,完全不可能超越线程的界线。COM自动化技术的最大特点之一就是它就是被设计成既可以用于线程外(通过外部EXE)也可以用于线程内(通过VBA或通过GetInterfaceObject()来调用VB6的ActiveXDLL)。目前这仍然是从外部可执行程序驱动AutoCAD的最好方式。通常我不建议在进程间传递太多的信息。如果你需要从外部程序驱动AutoCAD,最好只是通过它运行AutoCAD(或是在可能的情况下连接到一个已运行的

4、实例),接下来加载一个线程内的模块,让它在AutoCAD的进程内完成主要的任务。12外部.NET程序与AutoCAD交互下面的代码就将展示如何用C#来完成这一过程。它会尝试连接到一个已运行的AutoCAD实例(这是随意的-你也可以把代码修改成直接运行一个AutoCAD),如果失败则运行。一旦有了正在运行的对象实例,使之可见且运行一个自定义命令。建议将程序设置成自动加载-要么在AutoCAD启动时加载,要么在命令被触发时加载,然后运行一个模块中定义的命令。你需要添加对“AutoCADTypeLibrary”的引用,还有导入以下命名空间。usingSystem;usingSystem.Runti

5、me.InteropServices;usingAutodesk.AutoCAD.Interop;下面的代码你可以添加到比如某个按钮的Click事件中或其他有效的函数中去。[代码如下]//"AutoCAD.Application.17"uses2007or2008,//  whicheverwasmostrecentlyrun//"AutoCAD.Application.17.1"uses2008,specificallyconststringprogID="AutoCAD.Application.17.1";AcadApplicationacApp=null;try{  acApp=   

6、 (AcadApplication)Marshal.GetActiveObject(progID);}catch{  try  {    TypeacType=      Type.GetTypeFromProgID(progID);    acApp=      (AcadApplication)Activator.CreateInstance(        acType,        true      );  }  catch  {    MessageBox.Show(      "Cannotcreateobjectoftype""+      progID+"""    

7、);  }}12外部.NET程序与AutoCAD交互if(acApp!=null){  //BythetimethisisreachedAutoCADisfully  //functionalandcanbeinteractedwiththroughcode  acApp.Visible=true;  acApp.ActiveDocument.SendCommand("_MYCOMMAND");}前面讨论了如

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。