当前位置:小鱼儿玄机二站 > 计算机网络 > API开辟条件搭建

API开辟条件搭建

文章作者:计算机网络 上传时间:2019-12-03

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

1、开采情状介绍

使用.NET开拓CAD,在CAD2006事前的版本其实用的是ActiveX的艺术开垦的,并不是真的意义上的.Net开采。从CAD二零零五起头帮忙了.NET对其的花销,在设置CAD二〇〇七后头的版本时都必需安装.NET Framework,评释CAD本人也是有部分机能是用.NET开辟出来的。

2、开垦情况搭建

2.1:安装CAD的二零零七或越来越高版本。

2.2:安装.NET开垦工具(比方VS)。

2.3:开垦语言能够用归于.NET的C#、VB.NET、托管C++等。

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

3.1:VS二〇〇七新建项目,选拔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,在CAD2007事情未发生前的版本其实用的是ActiveX的法子开垦的,而不是真的含义上的...

AutoCAD三次开荒工具:一九八九年AutoLisp,1988年ADS,1989年DCL,1994年ADS-CRUISERX,1994年ObjectA奥德赛X,1998年Active X Automation(COM),1996年VBA,1999年Visual Lisp,2006年.net API(DLL).

动向和样子:AutoCAD.net API(AutoCAD二零零五出现,情势是用netload调用DLL插件)

ACAD、APAJEROX、VS、.NetFramework版本对应提到。

AutoCAD        VS      .NetFramework

2015        2012         4.5

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

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

上边未有wpf,LINQ,WCF,WF,所以不建议利用。

二零零五-二〇〇九     二零零六         2    cad客商37%最多    64人的有07和15,那些本子是能合作最多的,那是低于的必要版本了。 VC从vs二零零五才有vc8

二零零二-二零零五     2000                客户27%  06年才开垦出.netAPI,所以不能够用低于06

由于AGL450X和AutoCAD都以Autodesk公司出品的,所以版本号相像。

分选版本对应最根本的是VS引用的DLL一定要和对象情形AutoCAD黄金时代致。其次是FrameWork版本。上面只是最棒组合,但不是木石心肠供给。

 

 CAD官方:

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

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

综合:
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 

最低规范:  vs二零零六  framework3.5 cad2005  arx2005  sql 二零零六Escort2 

经文碰到:  win7   vs2009  cad二零一三/2  arx二〇一三       

洋气景况:  win10  vs二〇一三   cad二零一四  
新颖版本:  framework 二〇一四  cad二零一五  sql 贰零壹陆

因思谋到CAD叁遍开荒是为广大客户使用,何况必需依靠一定的CAD版本和framework版本,为尽只怕保险支付的软件能在大好多阳台运用,并且付出条件还相比人性化,且具备大超多功能,选拔精湛环境开荒。假设个人或钦定情况使用,则提出接收风尚情状,能够在win10这样通用平台下运作,还足以投入应用杂货店。

搭建情况步骤:

1、 安装 ObjectARX SDK (Arx_All_2006) (里面有Interop的七个lib,因为CAD暗中同意地点不显著不佳找。)

2、 安装 autocad_2010-2012_dotnet_wizards  (开荒向导,免去手动操作的劳苦)

方法有两种:①手动建设布局类公事dll,②用dotNet Wizard向导自动达成。提议向导方便急忙

艺术风姿罗曼蒂克:手动塑造类库

1、 vs中新建类库。

2、 增加援用:

D:Program Files (x86)AutoCAD 2007     (经比较与ObjectARubiconX 2006之中的等同,所以用cad目录的卡塔尔国

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

D:Program Files (x86)AutoCAD2007ObjectARX 2007inc

acax17ENU.tlb    axdb17enu.tlb        

做到未来显得:  AutoCAD,       AXDBLib 

(注:AutoCAD 2015拆出贰个AcCoreMgd.dll,当管理编辑器、发表与打印、定义AutoLISP命令和函数时援用。)

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

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

变动————指标平台:Any CPU

调治将养————运转外界程序:D:Program Files (x86)AutoCAD 2007acad.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、A中华VX)

Autodesk.AutoCAD.Interop: C:windowsassemblyGAC_MSILAutodesk.AutoCAD.Interop17.0.54.0__eed84259d7cbf30bAutodesk.AutoCAD.Interop.dll

Autodesk.AutoCAD.Interop.Common:C:windowsassemblyGAC_MSILAutodesk.AutoCAD.Interop.Common17.0.54.0__eed84259d7cbf30bAutodesk.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")]

public static void hello()

{

            Editor ed =Application.DocumentManager.MdiActiveDocument.Editor;

           ed.WriteMessage("Hello World");

      }

以下是helloworld示例代码:

using System;

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.EditorInput;

//加快加载,加载程序时一贯注册类中命令,否则寻找每种类中命令。

[assembly: CommandClass(typeof(WizardDotNetAPI.MyCommands))]

namespace WizardDotNetAPI

{

public class MyCommands

{

[CommandMethod("hello",CommandFlags.Session)]

public void hello()

          {

//****在这里间写咱俩的插件效率***//

Editor ed =Application.DocumentManager.MdiActiveDocument.Editor;

ed.WriteMessage("HelloWorld");

//这里大家写的效能将在用到各命名空间里的类、接口、方法,那是上学的尤为重要//

  }

    }

}

活动运行代码:

using System;

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.EditorInput;

[assembly:ExtensionApplication(typeof(WizardDotNetAPI.MyPlugin))]

namespace WizardDotNetAPI

{

    publicclass MyPlugin : IExtensionApplication

{

        voidIExtensionApplication.Initialize()

        {

            //Initialize your plug-in application here

        }

        voidIExtensionApplication.Terminate()

        {

            //Do plug-in application clean up here

        }

    }

}

第4盘部:编写翻译和调整

(1)手动加载

点击生成>生成应用方案,也许 调节和测量试验——运营调节和测量试验。

启动AutoCAD——netload——选择D:DocumentsVisualStudio 2010ProjectsFirstCADdllFirstCADdll下的类文件.dll

Netload加载的前后相继不可能卸载,要想再调节和测试只好退出Autocad,然后重新编译、加载。

(2)自动加载

菜谱 项目>属性>调节和测验>运营操作,选取运转外界程序, AutoCAD.exe 。

命令行参数设置:/nologo /b"D:DocumentsVisual Studio 2010Projects本人的叁个向导生成程序dotnet_wizards_helloworlddotnet_wizards_helloworlddotnet_wizards_helloworldbinDebugstart.scr"

start.scr 文件是友好编排的autocad运行脚本文件,该文件是文件文件,增添生龙活虎行文本:netload "D:DocumentsVisual Studio2010ProjectsFirstCADdllFirstCADdllbinDebugFirstCADdll.dll"

那样大家就能够直接运营调度了。

(3)调试

依照以上步骤运转后,不帮助断点调节和测验,大家还应修正acad.exe.config文件,该公文在D:Program Files (x86)AutoCAD 二零零五下,扩充生龙活虎行<supportedRuntime version="v2.0.50727"/>内容。修正后的acad.exe.config.xml的剧情如下:

<configuration>

   <startup>

<supportedRuntime version="v2.0.50727"/>

   </startup>

<!--All assemblies in AutoCAD are fully trusted so there's nopoint generating publisher evidence-->

   <runtime>       

<generatePublisherEvidence enabled="false"/>   

   </runtime>

</configuration>

小技巧:不关闭CAD调试。

Netload加载的顺序无法卸载,要想再调节和测量检验只好退出Autocad,每便编译都需重启AutoCAD,很劳累,到英特网搜遍了,但尚无消逝措施,都算得微软没开拓那么些职能,(看来就等着自家正太君研商解决方案吗,O(∩_∩)O~)。经过自身不断尝试找到风流倜傥种能够差非常少和Edit and Continue相称的代表方法如下:

1、按上面步骤实行调治,放肆写一个命令如Hello,在这里个命令里设上断点,然后在AutoCAD运转时调用这一个命令,就可以进去VS的调节页面,在那地就能够拓展改动了。每趟要求改革时用这些hello命令。

其三有的:程序布置

AutoCAD二零一一事前,用注册表布置,之后用插件自动加载器。

①注册表计划:在注册表相应运营加载程序,可以用reg文件,也能够在程序里写(要援用Microsoft.Win32),如2009的地点为

[HKEY_LOCAL_MACHINESoftwareAutodeskAutoCADR18.0ACAD-8001:804Applicationsxxx]

description(描述)、loadctrls(加载调节加载方式)、loader(程序路线)、managed(程序格局Ox01托管程序卡塔尔国

loadctrls:0x02:CAD运行时加载,0x04下令加载,0x10从不加载,0x20:显式加载

(CAD2007_陆十二个人在注册表中并未有一定地点,像Interop同样难找,用搜到F3不停搜,结果只怕没找到,所以以下代码未测验成功。)

reg文件内容如下:

[HKEY_LOCAL_MACHINE/SOFTWARE/Autodesk/AutoCAD/R17.0/ACAD-5001:804/Applications/yds]

"DESC奥迪Q5IPTION"="加载自定义dll文件"

"LOADCTRLS"=dword:0000000c

"MANAGED"=dword:00000001

"LOADER"=" D:\Documents\testdll\hello.dll"

[HKEY_LOCAL_MACHINE/SOFTWARE/Autodesk/AutoCAD/R17.0/ACAD-5001:804/Applications/yds/Commands]

"ShowPalette"="ShowPalette"

5001象征autocad二〇〇六;LOADCT途睿欧LS表示描述装载的不二秘籍,值为12代表除非当发出命令时dll才被加载,当为2时启时就被加载(但是小编改成2,运营时照旧尚未电动加载);MANAGED的值只好为1,表示它是个托管程序。

再统生龙活虎此注册表,下一次起步autocad二〇〇六就可自动加载相关的dll了,何况实践哪这件事命令了。

②:配置文件安插:插件自动加载器,ApplicationPlugins里放软件包xxx.bundle(包罗contentsdll和PackageContents.xml),CAD运转时,自动将PackageContents.xml中多少登记加载。

CAD目录地点:C:ProgramFilesAutodeskApplicationPlugins

XP作者的文书档案地方:C:Documentsand SettingsAdministorApplication DataAutodeskApplicationPlugins

Win7自身的文书档案位置:c:UsersAdministratorAppDataRoamingAutodeskApplicationPlugins

③用lisp语言调用“Netload”命令,自动加载dll。

① lsp文书内容如下:

(COMMAND "netload" " D:\Documents\testdll\hello.dll ")

(Command "hello")

首先句表示让autocad加载钦点的dll,用\,表示转义,制止现身t等特殊符号。

其次句表示实行名称为"hello"的命令。如此dll中有hello这么些命令,就能够立即试行。

启航autocad2005 ,工具->Autocadlisp->加载应用程序 在弹出的窗体的运营组中加上上述lsp文件路经。

②其它可以定义八个限令调用,不直接开发银行。

(defun c:hello()

(COMMAND "netload" "D:\Documents\testdll\hello.dll")

(Command "hello")

(princ)

)

下边包车型地铁hello是概念的函数名,上边的是dll里面包车型大巴通令,第一遍举行hello,实施上面包车型地铁lsp内容,同一时间中间有个hello是dll的一声令下,第一回实行就径直实施dll的下令了。

③另后生可畏种调用lsp方法(经测量检验战败,没找到原因卡塔尔国:在AutoCAD安装目录找到D:Program Files (x86)AutoCAD 2007Supportacad2007.lsp

用记事本张开,在最后进入(下段代码第二行就可以,注意路线卡塔尔(英语:State of Qatar)

(command "netload" "D:Documentstestdllhello.dll")

完整代码是:

(arxload"vel.arx")

(if (not (=  (substr(ver) 1 11) "Visual LISP")) (load "acad2007doc.lsp"))

(command "netload" "D:Documentstestdllhello.dll")

;; Silent load.

(princ)

2. AutoCAD设置(首要,必得设置卡塔尔(قطر‎:工具-选项-文件-支持文件找寻路线-加多-浏览到hello.dll路线

④、用.NET程序加载.NET程序集,用到了微软的中坚类库mscorlib中的System.Reflection命令空间。加载时若是一个函数Assembly.LoadFrom(卡塔尔(قطر‎能够了,速度超级快。此法可每天后台加载.NET程序集,但托管的前后相继集不可能卸载,直到关闭AutoCAD为至。方法源自Kean (C#),未测试:

源自:

usingAutodesk.AutoCAD.ApplicationServices;

usingAutodesk.AutoCAD.EditorInput;

usingAutodesk.AutoCAD.Runtime;

usingSystem.Reflection;

namespaceLoadModule

{

    public class Commands

    {

        [CommandMethod("MNL")]

         static public void MyNetLoad()

         {

             Document doc =

              Application.DocumentManager.MdiActiveDocument;

             Editor ed = doc.Editor;

             PromptStringOptions pso =

               new PromptStringOptions(

                 "n输入要加载的顺序集全路径: "

               );

             pso.AllowSpaces = true;

             PromptResult pr =ed.GetString(pso);

             if (pr.Status != PromptStatus.OK)

                 return;

             try

             {

                 Assembly.LoadFrom(pr.StringResult);

             }

             catch (System.Exception ex)

             {

                 ed.WriteMessage(

                   "n不能够加载程序集{0}: {1}",

                   pr.StringResult,

                   ex.Message

                 );

             }

         }

     }

}

提议:算法是骨干,什么语言,景况,布置,都以外表,关键是学思维和算法。

参照他事他说加以考察资料:

objectarx.net论坛:

法文手册:

法定地址:

合法教程二零一五支付向导:

明经通道:

鲁班人[Ben'sBlog] 土木工程知识:
明经通道    
晓东CAD    
本子难点:

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=100420;

图书:停止2014.1.19,搜遍全部互联网,Hungary语材料超多,但通晓决市民民居房困难难,粤语就以下四本书最相符.net API学习,别的全都看过,不行。只要学好以下四本书就丰富了!
C#  AutoCAD.Net API

1.  AutoCAD VBA &VB.NET开拓幼功与实例教程(第2版卡塔尔(英语:State of Qatar)(C#版卡塔尔 二零一二-6 88.00元 中黄炎子孙民共和国电力出版社 曾洪飞,卢择临,张帆先生 页 数621 AutoCAD 2013Visual Studio 二〇〇九  C#

2.  [深入显出AutoCAD.NET一遍开垦].李冠亿 中国工业出版社 二〇一一.2 定价78 带光盘  P485   以.net为主,结合种种一遍开辟方式。

3.  基于Visual C#的AutoCAD 开采及其在工程中的应用 肖泽云 三峡高校  二〇〇八.4 P218网络版无书 用的ActiveX,但内容是土木CAD贰回开荒,主要学习算法思路。

4.  AutoCAD .NET 开垦指南二〇一三 版 官方网址翻译互联网版,P629 孙成波二〇一四.2.8  AutoCAD .NET Developer's Guide二零一三 版翻译 ,官方权威手册,内容太全,太多,不适合学习,遇到题目查找时用。
C++ ObjectARX
AutoCAD ObjectARX 付出底蕴与实例教程 张帆、朱文俊 2014-06-01 VC++ 6.0和VS 2005 arx2002 cad2002
AutoCAD二零零六二回开采实例教程(ObjectAWranglerX)  王文波 二零一一年11月 机械专门的学业用
公路工程CAD:

  1. 土木CAD技艺 北大东军大学 任爱珠 张建平  二零零七.5 带光盘     P450    综合介绍CAD,A昂CoraX为主,根底知识,重要学习图形学基本算法。
    2.公路Computer支持工程 贰零零叁 朱照宏
    :理论,相比综合回顾。
    《道路勘测设计软件开拓与运用指南》 朱照宏 贰零零叁 数模部分好
    3.公路计算机协理设计 符锌砂
    4.征程路径CAD 朱照宏
    5.道路工程CAD 杨宏志 于娇 许金良 周艳
    6.道路与桥梁工程Computer绘图 许金良 黄安(huáng ān卡塔尔国录
    道路CAD及其应用教程、工程实例
    公路工程CAD底工教程 郑益民
    计算机援助理工科程师程 张叔辉
    公路CAD  张郃生

正文由正态布满X~N(μ,σ2 卡塔尔(英语:State of Qatar)QQ2052702900写于2014年十二月12日,为近几天所学知识总结。

【注】全体文字,均为个体学习总结,仅当私家存在。若君不幸踏访,切勿揶揄,确有可取之处,没关系随心借取,确有错漏之处,还望多都赐教。

vs二〇一〇舒享版2.5G,杰出,装完10G,实地度量安装c#,C++和VSTO共4.59G
二零一三 Ultimate尊贵版1.5G ,少了msdn文书档案 和 SQLEXPRESS,有在线安装部分。安装完不带文档3G,带文档13G
vs2014差十分少要占30G。
固然系统带.net framework这就能够少占点。不带会自动装上
开源CAD:
pudn下载: http://www.pudn.com/sourcecode/graph/CAD/download210_2.html          ;
书下载: 

本文由小鱼儿玄机二站发布于计算机网络,转载请注明出处:API开辟条件搭建

关键词: