




免费预览已结束,剩余41页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AutoCAD.NET二次开发培训教程目录第一章AutoCAD基础6一、AutoCAD绘图基本知识61、软件功能区62、基本绘图命令63、图块、图组操作命令74、设计中心75、系统变量7第二章 DWG文件结构82.1.总体结构82.2 数据库中的容器对象92.2.1 BlockTable(块表) ,BlockTableRecord(块表记录)92.2.2DimStyleTable(标注样式表),DimStyleTableRecord(标注样式表记录)92.2.3LayerTable(层表),LayerTableRecord(层表记录)92.2.4LinetypeTable(线型表),LinetypeTableRecord(线型表记录)102.2.5RegAppTable(应用程序注册表), RegAppTableRecord(应用程序注册表记录)102.2.6TextStyleTable(文字样式表),TextStyleTableRecord(文字样式表记录)102.2.7 UCSTable(用户坐标系表),UCSTableRecord(用户坐标系表记录)102.2.8ViewportTable(视口表),ViewportTableRecord(视口表记录)112.2.9 ViewTable(视图表),ViewTableRecord(视图表记录)112.2.10 DBDictionary(词典)11第三章 .net二次开发基础知识123.1 运行机制123.2常用命名空间与库123.2.1Acdbmgd.dll123.2.2acmgd.dll123.2.3AcCui.dll133.2.4AdWindows.dll133.2.5acdbmgdbrep.dll133.2.6COM组件AutoCAD/ObjectDBX Common X.0 Type Library133.2.7COM组件AutoCAD xxx Type Library143.3常用类/结构143.3.1 Application 应用程序 (参见2.1)143.3.2 Document 文档 (参见2.1)143.3.3 Database 数据库 (参见2.1)143.3.4 Transaction 事务143.3.5 DBObject 数据库对象153.3.6 Editor 编辑器153.3.6 BlockTable(块表) ,BlockTableRecord(块表记录) 请参见2.2.1153.3.7 DBDictionary(词典) 请参见2.2.10153.3.8 Xrecord 扩展记录153.3.9 Entity 实体153.3.10 ObjectId 对象ID16第四章 第一个CAD程序16第五章 CAD实体基本操作205.1 常用实体操作205.1.1概述205.1.2打开关闭实体205.1.3 创建实体205.1.5 删除实体215.2 应用实例21第六章 符号表基本操作216.1数据库/文档的概念 (参见2.1)216.1.1 操作当前文档216.1.2 后台打开文档226.2 符号表操作226.2.1 九大符号表 (详细说明请参见2.2)226.2.2符号表常用操作226.3、模型空间和图纸空间246.3.1、模型空间246.3.2、图纸空间246.4 块,块记录,块引用256.4.1 概念256.4.2 创建块/块引用256.5应用实例26第七章 模态/非模态对话框267.1、为什么要用非模态对话框267.2 在CAD中使用模态和非模态对话框267.2.1.显示模态对话框267.2.2.显示非模态对话框267.3 应用实例:27第八章 扩展实体数据,扩展记录,对象词典278.1扩展实体数据278.1.1、扩展数据是什么278.1.2、在CAD中看到扩展数据的方法288.1.3、注册应用表(RegAppTable)288.1.4、添加扩展数据288.1.5. 删除扩展数据298.1.6、读取扩展数据298.2 扩展记录298.3词典308.3.1 概念 参见2.1.10308.3.2 命名对象词典的使用:308.3.3 对象扩展词典的使用。318.4 应用实例。32第九章 选择集329.1基本概念329.2 操作329.3 过滤器33第十章 Jig类3310.1概念3310.2 EntityJig(单实体即时绘图)3410.3 DrawJig(拖拽即时绘图)3410.4使用实例35第十一章 其他概念3511.1带参数的命令3511.1.1接收带参数的命令3611.1.2 发送带参数的命令3611.2 属性块3611.2.1、属性及属性定义3611.2.2定义属性3711.2.3添加带属性的块引用3711.2.4 属性块实例3811.3 组3811.3.1、组的概念3811.3.2 组的相关操作3811.3.3 组的应用实例3911.4 事件4011.4.1 概念4011.4.2 使用实例4011.5 几何4011.5.1 概念4011.5.2 Vector3d 三维向量4011.5.3 Matrix3d 三维矩阵4011.5.4 Tolerance 容差4111.5.5 Point3d 三维点4111.5.6 Extents3d 三维范围4111.5.7 应用实例4211.6 .NET与ObjectARX混合开发42附录43附录一ObjectARX库与AutoCAD.NET程序集对应关系43附录二AutoCAD常用快捷键43附录三 示例代码索引45第一章AutoCAD基础一、AutoCAD绘图基本知识1、软件功能区图(2-1)2、基本绘图命令绘图命令缩写功能linel绘制线段circlec绘制圆arca绘制圆弧ellipseel绘制椭圆plinepl绘制多段线pointpo绘制点3、图块、图组操作命令3.1、BLOCK创建块3.2、WBLOCK将对象或块写入新图形文件3.3、INSERT插入块引用3.4、GROUP实体编组4、设计中心重复利用和共享图形内容是有效管理绘图项目的基础。创建块参照和附着外部参照有助于重复利用图形内容。使用 AutoCAD 设计中心,可以管理块参照和外部参照。另外,如果打开多个图形,就可以通过在图形之间复制和粘贴其他内容(如图层定义、布局和文字样式)来简化绘图过程。5、系统变量AutoCAD将操作环境和一些命令的设置(或值)存储在系统变量中。每个系统变量都有一定的类型:整数、实数、点、开关或字符串。可以通过直接在命令行输入系统变量名检查任意系统变量的值和修改可写系统变量的值,或者通过使用Application的SetSystemVariable ()和GetSystemVariable ()函数、 SETVAR 命令或 AutoLISP 的 getvar 和 setvar 函数来实现。很多系统变量还可通过对话框选项访问。 要访问系统变量列表,请在“帮助”窗口的“内容”选项卡上单击“系统变量”旁边的加号“+”。第二章 DWG文件结构2.1.总体结构如上图,Application对象是AutoCAD应用程序的实例,通过该对象可以获得操作当前应用程序的相关对象,也可以通过其属性和方法设置AutoCAD程序的参数与系统变量,Document是AutoCAD的图纸文档,是DataBase(数据库)的前端显示,通常AutoCAD可能会打开多个文档,由Application对象的DocumentManager属性管理CAD的所有打开的文档对象。每一个文档的内容在内存中都是由一个DataBase(数据库)对象来表示的。Database 是对DWG数据文件的内容在内存中的描述,数据库中主要存储容器对象(Symbol Tables符号表 与 NameDictionaries命名对象词典),容器中存储特定的数据库对象(图形对象与大部分的非图形对象)。DataBase中主要存储9大符号表和命名对象词典。SymbolTable(符号表)是AutoCAD容器表对象的基类,用来存放SymbolTableRecord(符号表记录的基类)。可以通过符号表索引(SymbolTable)来获取对应名字的符号表记录的ObjectId(数据库中对象的唯一标识);2.2 数据库中的容器对象2.2.1 BlockTable(块表) ,BlockTableRecord(块表记录)BlockTable是存储BlockTableRecord的容器,存储在块表中的块记录就是CAD中的“块定义”或“匿名块”。BlockTableRecord是存放Entity(可见实体)的容器,模型空间(ModelSpace)和图纸空间(PaperSpace)是特殊的块表记录,存储在其中的实体自动调用其绘制函数在视图中显示几何形状。模型空间(ModelSpace)名为* ModelSpace的特殊块表记录;显示在CAD界面设计区的模型空间里的实体都必须存入模型空间块表记录中。图纸空间(PaperSpace)名为* PaperSpace的特殊块表记录。其他块表记录的实体如果想要显示在模型空间中,必须通过块引用的方式(对块记录做一个引用,把引用存入模型空间)2.2.2DimStyleTable(标注样式表),DimStyleTableRecord(标注样式表记录)DimStyleTable是存储DimStyleTableRecord的容器,其中存储的标注样式可以在“标注样式管理器”中查看。DimStyleTableRecord即标注样式,规定了标注的标注文本的位置,标注线型及箭头等标注规则。2.2.3LayerTable(层表),LayerTableRecord(层表记录)LayerTable是存放LayerTableRecord的容器,存储在层表中的层表记录即为图层,可以在“图层特性管理器”中查看。2.2.4LinetypeTable(线型表),LinetypeTableRecord(线型表记录)LinetypeTable是存放LinetypeTableRecord的容器,存储在其中的线型表记录可以在“线型管理器”中查看。2.2.5RegAppTable(应用程序注册表), RegAppTableRecord(应用程序注册表记录)RegAppTable是存放RegAppTableRecord的容器,用于存储应用程序注册表记录,RegAppTableRecord主要用于标识扩展数据的注册应用程序。2.2.6TextStyleTable(文字样式表),TextStyleTableRecord(文字样式表记录)TextStyleTable是存放TextStyleTableRecord的容器,存储在文字样式表中的文字样式记录可以在“文字样式管理器”中查看,文字样式表记录即“文字样式”。2.2.7UCSTable(用户坐标系表),UCSTableRecord(用户坐标系表记录)UCSTable是存放UCSTableRecord的容器,存储在用户坐标系表中的用户坐标系表记录可以在“UCS管理器”中查看。用户坐标系表记录即用户坐标系。1. WCS:世界坐标系即参照坐标系。其他所有坐标系都是相对与WCS定义的,WCS是永远不变的。2. UCS:用户坐标系统即工作中的坐标系。3. ECS:对象坐标系统。4. DCS:显示坐标系统即对象在显示前被转换的坐标系统。5. PSDCS:图纸空间DCS。2.2.8ViewportTable(视口表),ViewportTableRecord(视口表记录)ViewportTable是存放ViewportTableRecord的容器,存储在视口表中的视口表记录可以在“视口管理器”中查看。AutoCAD环境中图形屏幕上用于显示图形的一个矩形区域称为视口,可以把整个图形屏幕作为视口,也可以把整个视图屏幕设置成多个视口。添加到视口表的视口表记录即为“视口”。2.2.9ViewTable(视图表),ViewTableRecord(视图表记录)视图的管理包括视图定义,显示,属性设置和查询等功能。在AutoCAD的交互环境中,用户可以使用”VIEW”命令对视图进行命名,保存,恢复和删除。通过视图表类及视图表记录类管理视图。ViewTable是存放ViewTableRecord的容器,存放在其中的视图表记录可以在“视图管理器”中查看。视图表记录即“视图”。2.2.10DBDictionary(词典)DBDictionary是用于存储非图形对象的容器,与符号表不同的是:符号表里面只能存取固定符号表记录的对象,而词典可以同时保存多种由DBObject类派生的数据对象或词典(Entity除外)。常用于保存在词典中的对象有DataTable(数据表),Xrecord(扩展记录)。词典主要以两种方式存在:1. NameDictionaries(命名对象词典)存储在数据库中用来保存整个图纸的数据,每个DWG数据库都有一个命名对象词典,通常用来存储全局的扩展数据。2. ExtensionDictionary(对象扩展词典)用于保存对象的信息数据,所有数据库对象都可以包含一个扩展词典,用于存储用户自定义的数据,这些数据是对象级别的,即为对象的附属信息。第三章 .net二次开发基础知识3.1 运行机制1.启动CAD后,把.NET动态链接库通过netload命令加载到CAD的进程中,CAD进程会搜索动态链接库中的被定义为CommandClass的类(代码1),并注册类中带CommandMethod的函数的命令(代码2)。代码1. assembly: CommandClass(typeof(Sample.CH6_2_1)代码2. CommandMethod(AddSimpleEntity) public void AddSimpleEntity()3. 加载完成后,在CAD的命令行输入相应的命令后,CAD会自动检查是否注册了该命令,如果已经注册,则搜索命令对应的函数入口,然后执行函数代码。备注:命令名不容许包含空格。3.2 常用命名空间与库3.2.1Acdbmgd.dll包含对ObjectDBX API的封装,用于在图形文件中对对象进行操作。Autodesk.AutoCAD.Colors Autodesk.AutoCAD.DatabaseServicesAutodesk.AutoCAD.Geometry Autodesk.AutoCAD.RuntimeAutodesk.AutoCAD.GraphicsInterface Autodesk.AutoCAD.LayerManager3.2.2acmgd.dll包含大多数AutoCAD API的封装,用于对AutoCAD应用程序进行操作。Autodesk.AutoCAD.ApplicationServicesAutodesk.AutoCAD.EditorInputAutodesk.AutoCAD.WindowsAutodesk.AutoCAD.Windows.ToolPaletteAutodesk.AutoCAD.Internal.WindowsAutodesk.AutoCAD.Internal.Forms3.2.3AcCui.dll包含常用用户界面的封装。用于用户界面自定义文件进行操作Autodesk.AutoCAD.CustomizationAutodesk.AutoCAD.Customization.Interop3.2.4AdWindows.dll包含常用的Autodesk界面的封装,用于用户自定义工具条及菜单等用户界面Autodesk.AutoCAD.WindowsAutodesk.AutoCAD.Windows.ToolBars3.2.5acdbmgdbrep.dll用于查询Solid,body,Region三种类型实体的边界表示,主要应用包括:1) 将实体模型数据转换到用于显示,分析和控制的应用程序;2) 确定实体模型的特征,并且列出其有关的信息;3) 将实体模型的数据传送的别的系统中去;Autodesk.AutoCAD.BoundaryRepresentation3.2.6COM组件AutoCAD/ObjectDBX Common X.0 Type LibraryAutodesk.AutoCAD.Interop3.2.7COM组件AutoCAD xxx Type LibraryAutodesk.AutoCAD.Interop.Common3.3常用类/结构3.3.1 Application 应用程序 (参见2.1)3.3.2 Document 文档 (参见2.1)3.3.3 Database 数据库 (参见2.1)3.3.4 Transaction 事务Transaction 是用来保持对数据库操作的原子性。事务可以嵌套事务,所有的对数据库对象的操作都应该在事务中进行(未添加进数据库的对象除外)。在事务中打开对象有三种方式【只读/写/通报】,一个对象可以同时被两个事务以读的方式打开,写操作为独占操作,以写模式打开时,不容许其他事务操作该对象,通报模式不常用。通常使用using()的格式来使用事务,这样系统会自动关闭事务。(数据库对象:继承自DBObject类的对象,可以添加到数据库容器对象中)如以下示例,往模型空间中添加一个实体using (Transaction trans = db.TransactionManager.StartTransaction() /得到块表 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead); /获得块表记录(模型空间) BlockTableRecord modelSpace = (BlockTableRecord)trans.GetObject(btBlockTableRecord.ModelSpace, OpenMode.ForWrite); /往模型空间中添加实体 entId = modelSpace.AppendEntity(ent); /通知事务,实体添加到数据库中 trans.AddNewlyCreatedDBObject(ent, true); trans.Commit();事务使用规则:所有对数据库对象的修改都必须在事务中进行,事务中修改的数据库对象必须是在同一个事务中打开(新添加或获得)的对象。同一个事务也包括嵌套的子事务。3.3.5 DBObject 数据库对象是所有数据库对象的基类,是一个抽象类,所有派生于DBObject的对象都可以存储在数据库中。3.3.6 Editor 编辑器Editor对象是AutoCAD界面中的命令行。AutoCAD与用户的交互(输入,输出)功能通过Editor对象实现。3.3.6 BlockTable(块表) ,BlockTableRecord(块表记录) 请参见.7 DBDictionary(词典) 请参见2.2.10加入词典中的对象必须是继承自DBObject类的对象。并且加入前没有包含在数据库中,即对象的ObjectId的值为NULL。词典被删除时,自动删除词典里面存储的数据库对象。注意:对象删除时,只是添加一个删除标记。保存图纸时再把对象删除。3.3.8 Xrecord 扩展记录Xrecord是用来存放数据的对象,最大可存储2GB的数据。3.3.9 Entity 实体Entity是所有可视化对象的基类,定义了可视化对象的成员及实现了图形显示接口,可视化对象都继承它的特性。3.3.10 ObjectId 对象IDObjectId是描述对象在数据库中的唯一标记。所有的数据库对象都有一个(文件内唯一的)ObjectId。通常通过ObjectId从数据库中获得对对象的操作。第四章 第一个CAD程序在这一章中,我们将使用Visual Studio .NET来创建一个新的类库工程。通过这个工程,你可以创建一个能被AutoCAD装载的.NETdll文件。这个dll文件会向AutoCAD加入一个名为“HelloWorld”的新命令。当用户运行这个命令后,在AutoCAD 命令行上将显示“Hello World”文本。1)启动Visual Studio.NET,选择”文件新建工程”(File New Project)。在新建工程对话框中选择工程类型为”Visual C#工程”,然后选择”类库”模板,在工程名字框中输入”Lab1”,然后选择工程存放的位置。点击确定按钮来创建工程。2)在工程的Class1.cs文件中,一个公有类“Class1”已经被系统自动创建了。接下来向这个类加入命令。要加入命令,你必须使用AutoCAD .NET托管封装类。这些托管封装类包含在两个托管模块中。要加入对这两个托管模块的引用,请用鼠标右键单击”引用”然后选择”添加引用”。在弹出的”添加引用”对话框中选择”浏览”。在”查找范围”对话框中,选择AutoCAD 2010的安装目录(这里假定为C:Program FilesAutoCAD 2010),在这个目录下找到“acdbmgd.dll”然后选择并双击它或点击确定。再一次重复上一步的步骤,添加对“acmgd.dll”的引用。正如它们的名字所表示的,acdbmgd.dll包含ObjectDBX托管类,而acmgd.dll包含AutoCAD托管类。 最后把这两个引用文件的属性【复制本地】置为false。如果忘了设置,编译完以后会在生成目录生成这两个文件,设置完属性后,必须把这两个文件删除。4)引用了ObjectARX .NET 封装类后,我们就可以导入它们。在Class1类的声明语句(位于Class1.cs文件的顶部的)之前,导入ApplicationServices, EditorInput 和 Runtime命名空间。using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.EditorInput;using Autodesk.AutoCAD.Runtime;5)接下来添加对类Class1的注册说明,使CAD能识别Class1是包含了命令的类,在Class1.cs文件的使用命名空间的位置添加下列代码。assembly: CommandClass(typeof(Lab1.Class1)namespace Lab1.Class1 class Class1 6)在类Class1中加入命令。要加入能在AutoCAD 中调用的命令,你必须使用“CommandMethod”属性,使CAD能识别这个命令。这个属性由Runtime命名空间提供。在类Class1中加入下列属性和函数。CommandMethod(HelloWorld)publicvoid HelloWorld()7)当“HelloWorld”命令在AutoCAD中运行的时候,上面定义的HelloWorld函数就会被调用。在这个函数中,一个Editor类的实例将被创建。Editor类拥有访问AutoCAD命令行的相关方法,它还包括选择对象和其它一些重要的功能。AutoCAD当前活动文档的Editor对象可以使用Application类来访问。当Editor对象被创建后,你可以使用它的WriteMessage方法在命令行中显示“Hello World”文本。在HelloWorld函数中加入以下代码:Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; ed.WriteMessage(Hello World);8)要在AutoCAD中调试这个程序,你可以让Visual Studio.NET启动一个AutoCAD进程。在解决方案管理器中右键单击“Lab1”,然后选择”属性”。在Lab1的属性页对话框中,选择”调试”。在”启动操作”项中,选择”启动外部程序”,在”启动外部程序”的右边单击省略号按钮然后选择AutoCAD 2010安装目录下的acad.exe。设置好以后,按F5来启动一个AutoCAD进程。这样就会编译你的程序然后自动启动AutoCAD,而当编译后有错误的时候就会停止。请修正你可能碰到的任何错误。9)“NETLOAD”命令被用来装载托管程序。在AutoCAD命令行中输入NETLOAD,会出现”选择.NET组件”的对话框。选择上面生成的“lab1.dll”然后打开它。10)在命令行中输入“HellowWorld”。如果一切顺利的话,命令行中将显示“Hello World”文本。切换到Visual Studio.NET,在ed.WriteMessage(“Hello World”);语句处加入一个断点。在AutoCAD中再次运行HelloWorld命令,你会注意到你可以跟踪代码的运行。Visul Studio.NET的”调试”菜单有好几项可以用来跟踪程序的运行。11) 如果要想调试时自动加载生成的动态库,可以在生成目录下添加一个cad的lsp文件(acad.lsp)。在文件里面添加自动加载的脚本(setq filepath (findfile lab1.dll)(COMMAND NetLoad filepath).然后设置CAD的搜索目录:启动cad,单击菜单栏的工具-选项-文件。把生成目录添加为【支持文件搜索路径】。如下图这样设置完成后,启动调试就能自动加载你生成的动态库了。如果有时间的话,请浏览一下CommandMethod属性。你会发现它有七种不同的形式。在上面的例子中,我们使用了最简单的形式,它只有一个输入参数(命令的名字)。你可以使用其它的形式来控制命令的工作方式,例如你可以确定命令组的名字、全局和局部名字、命令标识(命令如何来运行)等。第五章 CAD实体基本操作5.1 常用实体操作5.1.1概述实体类,就是具有图形表示的数据库类,只有实体类创建的对象可以在AutoCAD中显示。5.1.2打开关闭实体using (Transaction transaction = db.TransactionManager.StartTransaction() /根据实体ID获得实体对象,打开实体 Entity ent = transaction.GetObject(objectId, OpenMode.ForWrite) as Entity;实体操作代码db.Commit();5.1.3 创建实体Circle cir = new Circle(Point3d.Origin, Vector3d.ZAxis, 15);/创建圆5.1.4 在模型空间中显示实体Database db = HostApplicationServices.WorkingDatabase; ObjectId entId; using (Transaction trans = db.TransactionManager.StartTransaction() /得到块表 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead); /获得块表记录(模型空间) BlockTableRecord modelSpace = (BlockTableRecord)trans.GetObject(btBlockTableRecord.ModelSpace, OpenMode.ForWrite); /往模型空间中添加实体 entId = modelSpace.AppendEntity(cir); /把实体添加到数据库中 trans.AddNewlyCreatedDBObject(cir, true); trans.Commit(); 5.1.5 删除实体using (Transaction trans = db.TransactionManager.StartTransaction() DBObject obj = trans.GetObject(objectId, OpenMode.ForWrite); if (obj is DBText) obj.Erase(); result = true; trans.Commit(); 5.2 应用实例添加一个字符对象到模型空间: 参见实例Sample.CH6_1_2的AddEntToModelSpace命令。第六章 符号表基本操作6.1数据库/文档的概念 (参见2.1)6.1.1 操作当前文档a.获得前台打开的所有文档集合:Autodesk.AutoCAD.ApplicationServices.Application.DocumentManagerb.获得当前活动图档Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocumentc.获得当前活动图档的数据库1.Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database2. HostApplicationServices.WorkingDatabased.获得编辑器Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;6.1.2 后台打开文档Autodesk.AutoCAD.DatabaseServices.Database db = new Autodesk.AutoCAD.DatabaseServices.Database(); db.ReadDwgFile(xxx.dwg,FileOpenMode.OpenTryForReadShare, true, );6.2 符号表操作符号表是存储数据库对象的容器,用于组织和管理数据库对象 1. 每种符号表都有确定类型的记录与之关联,符号表中存储的记录叫符号表记录,通常在符号表类名后加Record的类就为该符号表的记录(BlockTable(块表) ,BlockTableRecord(块表记录))。不能创建或者删除符号表,而只能增加或者修改符号表中记录。6.2.1 九大符号表 (详细说明请参见2.2)6.2.2符号表常用操作6.2.1 获得符号表/开始一个数据库操作事务 using (Transaction transaction = db.TransactionManager.StartTransaction() /根据块表ID获得数据库的符号块表 BlockTable bt = transaction.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;6.2.2创建符号表记录,并添加到符号表中 BlockTableRecord blockRecord = new BlockTableRecord(); blockRecord.Name = bimcad; /实例化一个直线实例 Line line = new Line(Point3d.Origin, new Point3d(10, 15, 0); /实例化一个圆 Circle circle = new Circle(Point3d.Origin, Vector3d.ZAxis, 10); /往块表记录中添加对象 blockRecord.AppendEntity(line); blockRecord.AppendEntity(circle); bt.Add(blockRecord); transaction.AddNewlyCreatedDBObject(blockRecord, true);6.2.3遍历符号表 /符号表遍历 SymbolTableEnumerator btEnum = bt.GetEnumerator(); while (btEnum.MoveNext() ObjectId objId = btEnum.Current; /提交事务 transaction.Commit();6.2.4 移除符号表记录/检查块表中是否存在该块表记录 if (bt.Has(recordName) /btrecordName该表达式获得块表中名称为recordName的块表记录ID DBObject obj = trans.GetObject(btrecordName,OpenMode.ForWrite); ObjectId objId = btrecordName; ObjectIdCollection idCol = new ObjectIdCollection(); idCol.Add(objId); db.Purge(idCol);/检查块记录中是否有对象,Database.Purge(ObjectIdCollection ids)返回集合中没有硬所有关联关系的对象ID集合 if (idCol.Count = 0) Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(n不能删除有硬所属关系的块表记录); else obj.Erase();/把对象从数据库中移除 备注:移除符号表记录时通常检查一下记录中是否有实体。6.3、模型空间和图纸空间6.3.1、模型空间在基本数据库中,块表最初包含三条记录:*MODEL_SPACE、*PAPER_SPACE、PAPER_SPACE0,其中*MODEL_SPACE就是模型空间,也就是我们通常打开CAD后看到的第一个空间。6.3.2、图纸空间*PAPER_SPACE、PAPER_SPACE0就是图纸空间,也叫布局空间。6.4 块,块记录,块引用6.4.1 概念块:块是一个或多个连接的实体,用于创建单个的对象。块帮助用户在同一图形或其他图形中重复使用对象。块引用:块的一个实例。把块引用添加到模型空间中可以使块的内容显示在模型空间里。6.4.2 创建块/块引用:创建块参考6.2.2 ,:往模型空间插入块引用:BlockReference br = new BlockReference(Point3d.Origin, blockRecordId); / 通过块定义创建块参照 modelSpace.AppendEntity(br); /把块参照添加到模型空间中 trans.AddNewlyCreatedDBObject(br, true); / 通知事务添加块参照到数据库 trans.Commit();6.5应用实例1.创建一个块记录,在块记录同添加若干实体,把块记录添加到块表中,在模型空间中插入一个块引用。详细参见:实例Sample.CH6_1_1与Sample. CH6_2_3的“AddBlock”命令。2.新建一个层表记录,并插入层表。详细参见:实例Sample.CH6_1_3。作业:写一个程序,添加外部文件为块引用,启动调试可以自动加载生成的dll第七章 模态/非模态对话框7.1、为什么要用非模态对话框对话框分为两类:模态的和无模态的。模态对话框不能在对话框与同一个程序中的另一个窗口之间进行切换,使用者必须主动结束该对话框。无模态对话框允许在对话框与建立对话框的窗口之间进行切换。在我们的软件中,很多功能都要在对话框与绘图区之间进行切换,根据对话框数据信息进行绘图动作的控制,使用无模态对话框可以很方便的获取对话框的数据信息。7.2 在CAD中使用模态和非模态对话框7.2.1.显示模态对话框Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(form);7.2.2.显示非模态对话框Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog(form);注意:使用对话框时,为了不在windows任务栏上显示窗体,需要把ShowInTaskbar属性的值置为false,使用非模态对话框时,在弹出非模态对话框的时候先检查该对话框是否未释放。代码:if (_frmPr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业学生社团管理办法
- 放射性药品相关法律法规考核试题及答案
- 2025年保育员实操技能测试题库及答案解析
- 2025年云计算技术实战应用与认证考试预测题
- 采购助理招聘笔试题及解答(某大型央企)2025年
- 第七章 基于诊断测评开展的补偿性教学课例-高中英语单元教学设计
- 服务器解决方案合作协议合同范本模板4篇
- 4.1《喜看稻菽千重浪-记首届国家最高科技奖获得者袁隆平 》教学设计 2024-2025学年统编版高中语文必修上册
- 第四章 化学能转化为电能 教学设计 2023-2024学年高二上学期化学人教版(2019)选择性必修1
- 第十四课 创建按钮元件教学设计-2025-2026学年初中信息技术浙教版2013八年级下册-浙教版2013
- 天津市河北区2024-2025学年九年级上学期12月月考数学试题(含答案)
- 内墙刮大白分包合同模板2025年
- 甘肃省行政执法人员综合法律知识考试试题库
- 个人资本注入公司合作合同
- GB/T 44739-2024枸杞及其制品中枸杞多糖的测定离子色谱法
- 2015锅炉压力管道安装质量手册程序文件及安装工艺汇编
- 13J927-3 机械式停车库设计图册
- 《孤独的小螃蟹》课件
- 企业员工健康管理实施方案
- 《钢铁是怎样炼成的》读书分享课件
- 施工现场临时用电计算书范本
评论
0/150
提交评论