您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于.NET的AutoCAD二次开发培训
AutoCAD.NET开发培训吴玲东经天元2013年6月22日北京培训目标•培训内容主要是–ObjectARX基础知识–如何使用ObjectARX–如何在以后的实际工作中独立的获取相关资源和帮助•不是–如何使用C++–对所有的ObjectARXAPI做完整的讲述课程进度–API概览–ObjectARX基本知识–用户交互和选择集–数据库操作和事务–实体对象操作–扩充数据–用户界面–事件•.NET概述.NET概述什么是.NET?.NET框架–公共语言运行时(CLR)•面向对象的编程环境•.NET应用程序的公共执行环境-和JavaVM类似–但有更强的互用性•框架类库(FCL)•面向对象集合:可重用(来源:MSDN)VB源代码vbc.exeC++C#cc.execsc.exe操作系统服务公共语言运行时(CLR)JIT编译器NativeCode托管代码(dllorexe)AssemblyIL代码AssemblyIL代码AssemblyIL代码CLR运行模式编译器什么是.NET?.NET概述•重要概念•程序集•.NET中基本的部署和执行单元–通过清单自我说明•定义代码执行和访问许可的边界•(Source:MSDN)程序集清单netmoduleDllsBmp组成程序集的文件(通过名称和文件散列)依赖的程序集?版本和语言?标识?.NET编程的好处–面向对象的开发平台–自动内存管理–垃圾回收–统一的异常处理–支持多语言.NET编程的好处•面向对象的开发平台你看到的一切都视作“对象”!DimmyLineAsNewLine()myLine.StartPoint=NewPoint3d(0,0,0)myLine.EndPoint=NewPoint3d(10,10,0)myLine.GetClosestPointTo(NewPoint3d(5,5.1,0),False)DimxasInterger=7DimsasString=x.ToString()–对象是类的实例(例如myLine是对象,而Line是个类)–对象有属性例如StartPoint,还有方法例如GetClosestPointTo().NET编程的好处自动内存管理原有方式(C++)-有内存泄漏的危险!char*pName=(char*)malloc(128);strcpy(pName,Hello);//...free(pName);现有方式-.NETC++-String*pName=newString(Hello)VB-DimNameAsString=HelloC#-StringName=―Hello‖;//垃圾回收处理内存释放,不要“Delete”!.NET编程的好处统一的异常处理–原有方式–VB:不易辨清错误原因OnErrorGoToUnexpectedErrorDimxAsDouble=10/0‗…error!UnexpectedError:MsgBoxStr$(Err.Number)–新方法–VB.NETTryDimxAsDouble=10/0‗…errorwhichthrowsexceptionCatch‗…whathappened?DivisionbyZero!Finally‗…cleanup-dothiseitherwayEndTry.NET编程的好处支持多语言–最常使用C#,VB.NET–各种语言可互用.例如C#编写的类可以继承自VB.NET的类。实际上,AutoCAD托管的装配就是使用的托管的C++,这样VB.NET也能访问。–所有语言编译成被CLR执行的IL(中间语言)时,在性能上没有明显的差别•AutoCAD.NET概述•VisualStudio工程设置AutoCAD.NETAPI文档•如何入门?•ObjectARXSDK包括:–.NET例子!–ObjectARX开发指南–托管参考向导•Arxmgd.chm•VisualStudio类浏览器开发环境•MicrosoftVisualStudio2012或2010•AutoCAD2013,2014•MicrosoftWindows7VisualStudio工程设置–创建ClassLibrary应用程序,输出为DLL–添加AutoCAD的托管程序集引用•acdbmgd.dll–操作数据库服务和DWG文件(如同ObjectDBX)•acmgd.dll–AutoCAD应用程序(如同ObjectARX)•\SDK\inc-win32•\ProgramFiles\AutoCAD2011\VisualStudio工程设置•引用需要的命名空间•VB.NET语法:•访问AutoCAD程序对象•usingAutodesk.AutoCAD.ApplicationServices;•访问theAutoCAD编辑器•usingAutodesk.AutoCAD.EditorInput;•命令注册•usingAutodesk.AutoCAD.Runtime;VisualStudio工程设置–HelloNet!•添加一个简单的命令–HelloNet–创建一个函数,并通过添加其属性使其成为一个AutoCAD命令PublicClassClass1»[CommandMethod(HelloNet)]»publicvoidHelloNet()»{»}EndClass–该属性添加到该函数对应的metadata–Autodesk.AutoCAD.Runtime.CommandMethod–CommandMethod或CommandMethodAttribute的构造函数的参数可以有组名,全局名,本地名等VisualStudio工程设置•打印一个字串–获取当前活动文档的editor对象Editored=Application.DocumentManager.MdiActiveDocument.Editor;–调用editor的WriteMessage方法PublicClassClass1»[CommandMethod(HelloNet)]»publicvoidHelloNet()»{»Editored=Application.DocumentManager.MdiActiveDocument.Editor;»ed.WriteMessage(使用NET开发AutoCAD程序);»}EndClassObjectARX2010向导•\SDK\ObjectARX2010\utils\ObjARXWiz•AppWizard–VB.NET或C#的模板•VS的插件加载.NET程序集–NETLOAD命令–按需加载(注册表)•AutoCAD启动时候•命令被调用时候•被请求加载•从其它程序•代理检测•[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R18.0\ACAD-8001:409\Applications\AcLayer]•DESCRIPTION=AutoCADLayerManager•LOADER=C:\\ProgramFiles\\AutoCAD2010\\aclayer.dll•LOADCTRLS=dword:0000000e•MANAGED=dword:00000001•[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R18.0\ACAD-8001:409\Applications\AcLayer\Commands]•LAYER=LAYER•[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R18.0\ACAD-8001:409\Applications\AcLayer\Groups]•ACLAYER_CMDS=ACLAYER_CMDS―•使用安装程序设置这些键值•用户交互和选择集用户交互提示–形如PromptXXXOptions的类来设置提示参数•XXX表示需要输入的类型例如Angle,String,Distance,Corner等•其属性Message为提示字串和Keywords为关键字列表•AllowYYY设置输入条件,如:AllowNegative–Editor的GetXXX函数进行输入•如-GetAngle,GetString,GetDistance,GetCorner等•PromptXXXOptions作为参数传入GetXXX–交互函数获取的用户输入结果保存在PromptResult或其派生类存储输入结果•如–PromptDoubleResult,PromptIntegerResult等–说明:通过GetString获取字符时,返回的结果保存在PromptResult类型的变量中,可以直接通过PromptResult.StringResult属性获取用户输入的字符。PromptIntegerOptionsintOp=newPromptIntegerOptions(请输入多边形的边数:)PromptIntegerResultintRes=ed.GetInteger(intOp);intRes=ed.GetInteger(intOp);PromptResult的Status属性是PromptStatus枚举类型的数据,不同的输入状态对应相应的输入状态,可以是以下值:•PromptStatus的值表示的意义:•OK用户输入值有效,正常输入•Cancel用户按下了Esc键,取消输入•Error调用失败•Modeless用户从属性面板输入•None用户输入回车•Keyword输入关键字•Other其他输入结果用户交互•PromptsXXXOptions的限定属性•属性值说明•AllowNone是否允许空输入•AllowZero是否允许输入0•AllowNegative是否允许输入负数•AllowArbitraryInput是否允许任意输入(无论什么类型)•这些属性都是bool型的数据,在使用时只需要把所需的属性设置成true或false即可。选择集–选择集是被用户或程序所选择的一组实体,是与用户进行交互的重要的方式之一。在程序中可以要求用户选择实体,也可以使用过滤器来进行自动选择,Editor类提供了许多用于操作选择对象的方法。选择集•选择的一组实体•以上方法都返回PromptSelectionResult类型的对象实例•通过PromptSelectionResult.Value属性可以获所选中的选择集,即SelectionSet类的实例•通过SelectionSet类的GetObjectIds()方法返回所有选中实体的对象ID的集合,实体的ID就可以对实体进行操作方法描述方法描述GetSelection用户选择SelectImplied用户指定SelectAll全部选中SelectLast选择最后一个实体SelectCrossingPolygon相交多边形选择SelectPrevious选择上一个选择集SelectCrossingWindow相交窗口选择SelectWindow窗口选择SelectFenceFence选择SelectWindowPolygon多边形选择对象选择集的创建方法:以GetSelection()为例•[CommandMethod(SelectEnt)]•staticpublicvoidSelectEnt()•{•//获取Editor对象•Editored=Application.DocumentManager.MdiActiveDocument.Editor;•PromptSelectionOptionsselectionOp=newPromptSelectionOptions();•PromptSelectionResultssRes=ed.GetSelection(selectionOp);•if(ssRes.Status==PromptStatus.OK)•{•SelectionSetSS=ssRes.Value;•intnCount=SS.Count;•ed.WriteMessage
本文标题:基于.NET的AutoCAD二次开发培训
链接地址:https://www.777doc.com/doc-2340949 .html