图片 3

AutoCAD .NET叁遍开辟(一)

.NET开发CAD入门之Hello,.netcadhello

1、开发情况介绍

使用.NET开发CAD,在CAD2005之前的版本其实用的是ActiveX的方式开发的,并非真正意义上的.Net开发。从CAD2005开始支持了.NET对其的开发,在安装CAD2005之后的版本时都必须安装.NET
Framework,证明CAD本身也有部分功能是用.NET开发出来的。

2、开发环境搭建

2.1:安装CAD的2005或更高版本。

2.2:安装.NET开发工具(例如VS)。

2.3:开发语言可以用属于.NET的C#、VB.NET、托管C++等。

3、使用VB.NET创建CAD开发的Hello项目

3.1:VS2005新建项目,选择VB-类库,指定名称及路径,勾选“创建解决方案的目录”。

3.2:项目添加引用,acdbmgd.dll和acmgd.dll,dll文件路径(C:\Program
Files (x86)\AutoCAD 2007)

 

3.3:视图-对象浏览器,浏览引用的程序集所提供的的类

3.4:添加Hello命令

'要添加命令必须导入AutoCAD .NET托管封装类
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Runtime

Public Class Class1
    '添加CAD命令,必须用 Runtime提供的CommandMethod属性
    <CommandMethod("Hello")> _
    Public Sub Hello() '当Hello命令在CAD中被执行,Hello()函数就会被调用
        '获取当前活动文档的Editor对象,也就是命令行
        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
        '调用Editor对象的WriteMessage函数在命令行上显示文本
        ed.WriteMessage("欢迎进入.NET开发AutoCAD的世界!")
        'CAD当前活动文档的Editor对象可以使用Application类来访问,创建Editor实例后,可以调用它的WriteMessage函数在命令行显示文本内容
    End Sub
End Class

3.5:调试

3.5.1:项目属性-调试-启动外部程序,找到相应的CAD版本

3.5.2:CAD装载托管程序,用NetLoad命令。在CAD命令行执行NetLoad命令,弹出【选择.NET程序集】的对话框,选择编译生成的Hello.dll文件。

3.5.3:在CAD命令行输入Hello并回车执行命令,会出现“未知命令”的提示。

因为什么之后研究,解决这个问题的方法是:停止调试,项目属性-引用
查看acdbmgd.dll和acmgd.dll的“复制本地”属性,将True修改为False。

再次调试即可。

 在此非常感谢《Auto CAD VBA & VB.NET开发
基础与实例教程》这本书对我的帮助。 

文章内容纯属个人的一点想法和感受,由于水平有限,难免会有错误和遗漏,欢迎批评指正(邮箱:[email protected])。
查看评论

1、开发情况介绍
使用.NET开发CAD,在CAD2005之前的版本其实用的是ActiveX的方式开发的,并非真正意义上的…

AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active
X Automation(COM),1997年VBA,1998年Visual Lisp,2006年.net API(DLL).

其他话不多说,直接进入主题,既然是二次开发,当然是用CAD平台已经封装好了很多类,我们需要熟悉和使用它们。常用的AutoCAD
.NET API的四个主要DLL文件是:

趋势和方向:AutoCAD.net
API(AutoCAD2006出现,形式是用netload调用DLL插件)

名称

作用

备注

AcDbMgd.dll

处理图形文件中存储的对象

 

AcMgd.dll

处理AutoCAD应用程序和用户接口

 

AcCui.dll

处理自定义文件

 

AcCoreMgd.dll

处理编辑器、发布与打印、定义AutoLISP命令和函数

AutoCAD 2014版

ACAD、ARX、VS、.NetFramework版本对应关系。

我们现在不必去深究这些类库的构造,这四个引用
的位置可以在CAD的安装路径下找到,(<盘符>:\program Files\AutoCAD
2013),先来一个测试实例:

AutoCAD        VS      .NetFramework

新建类库项目,添加AcDbMgd和AcMgd引用,将引用的”复制本地”属性设置为False

2015        2012         4.5

图片 1

2012-2014     2010/2012    4.0     也有用vs10开发在08cad运行       
.net4.0有DLR

设置项目属性中”调试”启动外部CAD程序。

2010-2011     2008        3.5   cad10-12用户28%第二多 推荐
也有用vs08在cad08运行   .net3.0之后有LINQ,wpf,wf,wcf

图片 2

下面没有wpf,LINQ,WCF,WF,所以不建议使用。

添加测试代码,新建一个DWG文件。

2007-2009     2005         2    cad用户37%最多   
64位的有07和15,这个版本是能兼容最多的,这是最低的要求版本了。
VC从vs2005才有vc8

图片 3

2004-2006     2002                用户27% 
06年才开发出.netAPI,所以不能用低于06

启动调用,程序将打开Cad2013,在命令行中输入”netload”,加载生成的dll文件,输入命令”NEWDWG”进行测试。

由于ARX和AutoCAD都是Autodesk公司出品的,所以版本号一致。

在调试过程中遇到的主要问题有:

选择版本对应最关键的是VS引用的DLL必须要和目标环境AutoCAD一致。其次是FrameWork版本。上面只是最佳组合,但不是硬性要求。

问题一:未能找到类型或命名空间名称”CommandMethod”(是否缺少 using
指令或程序集引用?)

 

解决:如果是13以上的版本,除了添加AcDbMgd和AcMgd引用外,还应添加accoremgd引用,然后就是using了。

 CAD官方:

问题二:特性”CommandMethod”对此声明类型无效。它只对”method”声明有效。

VS CAD ARX Wiz
08 12
10 12/13
12 14/15/16
13 16

解决:CommandMethod语句之后的有效行必定要是一个函数。

 office
vs2010    office 07 10
vs2012    office 10 13 
vs2015    office 10 13 16     

问题三:程序集生成 — 引用的程序集”accoremgd.dll”针对其他处理器

综合:
vs2010    cad12/13          office 07/10
vs2012    cad 14/15/16    office 10/13 
首选:vs10(C#,C++,VSTO)   cad13 office 10 
VS2015(C#)    office 10 

解决:操作系统版本问题,将目标平台改为x64即可。

最低标准:  vs2010  framework3.5 cad2007  arx2007  sql 2008R2 

问题四:netload加载时错误: 未能完成程序集的安装(hr =
0x8007000b)。探测终止。

经典环境:  win7   vs2010  cad2013/2  arx2013       

解决:Framework平台是4.0,其中的Linq引用有问题,不用它,去掉即可。

时尚环境:  win10  vs2012   cad2016  
最新版本:  framework 2015  cad2016  sql 2014

因考虑到CAD二次开发是为广大用户使用,而且必须基于一定的CAD版本和framework版本,为尽量保证开发的软件能在大多数平台使用,而且开发环境还比较人性化,且具有大多数功能,采用经典环境开发。如果个人或指定环境使用,则建议采用时尚环境,可以在win10这样通用平台下运行,还可以加入应用商店。

搭建环境步骤:

1、 安装 ObjectARX SDK (Arx_All_2007)
(里面有Interop的两个lib,因为CAD默认位置不确定不好找。)

2、 安装 autocad_2010-2012_dotnet_wizards 
(开发向导,免去手动操作的麻烦)

方式有两种:①手动建立类文件dll,②用dotNet
Wizard向导自动完成。建议向导方便快捷

方法一:手动建立类库

1、 vs中新建类库。

2、 添加引用:

D:\Program Files (x86)\AutoCAD 2007\     (经对比与ObjectARX
2007里面的一样,所以用cad目录的)

AcCui.dll AcDbMgd.dll   AcMgd.dll     完成之后显示:AcCui  acdbmgd
acmgd    

D:\Program Files (x86)\AutoCAD2007\ObjectARX 2007\inc

acax17ENU.tlb    axdb17enu.tlb        

完成之后显示:  AutoCAD,       AXDBLib 

(注:AutoCAD
2014拆出一个AcCoreMgd.dll,当处理编辑器、发布与打印、定义AutoLISP命令和函数时引用。)

3、 把引用的文件属性,复制本地改为False

4、 在项目文件上右键属性—应用程序——目标框架.NETFramework3.5  
输出类型:类库,

生成————目标平台:Any CPU

调试————启动外部程序:D:\Program Files (x86)\AutoCAD 2007\acad.exe

5、 添加using,写代码。

//************** using的内容如下
**************//

//             Visula Studio2010             //

//*******************************************//

using System;

using System.Collections.Generic;

using System.Text;

//*******************************************//

//               Type Library               //

//*******************************************//

using Autodesk.AutoCAD.Interop; // AutoCAD 2008 TypeLibrary

using Autodesk.AutoCAD.Interop.Common; //AutoCAD/ObjectDBXCommon 17.0
Type Library

using Autodesk.AutoCAD.Customization;  //accui.dll

//*******************************************//

//               acdbmgd.dll               //

//*******************************************//

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.LayerManager;

using Autodesk.AutoCAD.GraphicsSystem;

using Autodesk.AutoCAD.GraphicsInterface;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.DatabaseServices.Filters;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Colors;

//******************************************//

//——————————————–//

//                 acmgd.dll               //

//——————————————*//

using Autodesk.AutoCAD.Windows.ToolPalette;

using Autodesk.AutoCAD.Windows;

using Autodesk.AutoCAD.Publishing;

using Autodesk.AutoCAD.PlottingServices;

using Autodesk.AutoCAD.EditorInput;

using Autodesk.AutoCAD.ApplicationServices;

方法二:用wizards直接建立,能自动引用指定dll,设置调试cad路径,还能写两个cs文件,一个命令的,一个启动关闭的。

1、安装autocad_2010-2012_dotnet_wizards。

2、运行vs2010——新建c#–Autodesk—AutoCADplug-in,选择.NET Framework 3.5

3、ObjectARX路径:D:\ProgramFiles (x86)\AutoCAD 2007

CAD路径:D:\Program Files(x86)\AutoCAD 2007

选择 Interop Common ,  Interop ,   AcCui

完成之后显示:AcCui  acdbmgd  acmgd      

Interop  Interop.common 
(应该与acax17ENU.tlb,axdb17enu.tlb一样,与其它二次开发方式交互时用,如VBA、LISP、ARX)

Autodesk.AutoCAD.Interop:
C:\windows\assembly\GAC_MSIL\Autodesk.AutoCAD.Interop\17.0.54.0__eed84259d7cbf30b\Autodesk.AutoCAD.Interop.dll

Autodesk.AutoCAD.Interop.Common:C:\windows\assembly\GAC_MSIL\Autodesk.AutoCAD.Interop.Common\17.0.54.0__eed84259d7cbf30b\Autodesk.AutoCAD.Interop.Common.dll 

4、调试路径,引用复制本地false,Framework3.5, x86,64选Any
CPU都已经默认设置好,using必备的也写了,不需操作。

5、默认两个类,一个myCommands.cs   myPlugin.cs

myCommands.cs:用于命令方式

myPlugin.cs:软件开启或关闭时执行

helloworld操作代码:

[CommandMethod(“hello”)]