创建和编辑AutoCAD实体-vscode上配置 c语言环境的图文教程

时间:2024-06-29 08:10:53
【文件属性】:

文件名称:创建和编辑AutoCAD实体-vscode上配置 c语言环境的图文教程

文件大小:3.75MB

文件格式:PDF

更新时间:2024-06-29 08:10:53

CAD二次开发

第3章 创建和编辑AutoCAD实体 我们可以创建各种AutoCAD实体对象,从简单的直线和圆到样条曲线、椭圆和关联填充区域等。通常 使用 AppendEntity()函数将对象添加到 BlockTableRecord 对象。创建了一个对象后,我们就可以修改其 图层、颜色、线型等属性。 图形数据库与其他数据库程序类似,我们可以将模型空间的直线对象想像成表记录,而将模型空间想像 成数据库表。使用数据库时,必须在进行操作前打开记录。存储在图形数据库里的对象也是一样。我们使用 GetObject()函数从数据库中获取一个对象,并确定怎样使用该对象。 3.1 打开和关闭对象 不论是使用直线、圆和多段线这样的对象还是使用符号表及符号表记录这样的对象,我们都需要以读或 写模式打开这些对象。当查询一个对象时要以读模式打开对象;如果要对一个对 象进行修改,就要以写模式 打开对象。 3.1.1 使用 ObjectId 图形数据库 Database 对象中包含的每个对象都被赋予了几种独特的 ID 标志,以方便访问对象。这些 独特的标志有: 实体句柄 Handle; 对象 ObjectId; 实例指针 Instance pointer。 最常用方法是通过 ObjectId 访问对象。在一个开发项目里同时使用 COM 互操作和托管.NET API 的情 况下,对象 ObjectId 都能很好地工作。如果创建自定义 AutoLISP 函数,就需要使用实体句柄来访问对象。 句柄存在于AutoCAD会话之间,因此,如果我们需要将图形信息导出到一个外部文件,以便随后用于更新 图形,这时使用实体句柄访问对象是最好的方式。数据库中对象的 ObjectId 只在数据库加载到内存里时才 存在。一旦数据库关闭,赋予对象的 ObjectId 就不存在了,并且下次打开数据库时可能为该对象赋予了一 个不同的 ObjectId。 获取对象的 ObjectId 使用对象时,在打开对象对其进行查询或编辑前,需要先获得该对象的 ObjectId。图形文件打开时,数 据库中已存在的对象会被赋予一个 ObjectId,新对象在第一次创建时会被赋 予 ObjectId。数据库中已存 在对象的 ObjectId 通常通过下列方式获得: 使用 Database 对象的成员属性,如 Clayer 属性用来提取当前图层的 ObjectId; 遍历符号表,如遍历图层符号表可以获得每个图层的 ObjectId。 打开一个对象 一旦得到对象的 ObjectId,就可以使用 GetObject()函数打开该对象。打开对象的方式(打开模式)有 下列三种: Read.以读模式打开对象; Write.对还没打开的对象以写模式打开; Notify.以通知方式打开对象,用于当对象已经关闭、已经以读模式打开或已经以写模式打开时。更多 关于通知的内容,见(§7 使用事件)。 应以最适合访问的方式打开对象。以写模式打开对象可能会产生比你的需要还多的额外开销,原因是这 时会创建撤销记录。如果不能确定正要打开的对象就是你要使用的,应该以读模式打开,然后使用 UpgrateOpen()方法将打开模式由读模式升级为写模式。关于使用 UpgrateOpen()方法的更多内容,参见 (§3.1.4 升级打开对象与降级打开对象)。 GetObject()函数和 Open()函数都返回一个对象。使用某些编程语言时,我们可能需要对变量的返回值 进行强制类型转换。下面的例子演示如何获取当前数据库中图层 LayerZero 的 LayerTableRecord 记录: 下面的示例代码演示不再需要事务时手工将其关闭(释放内存)。 Document acCurDb = Application.DocumentManager.MdiActiveDocument.Database; Transaction acTrans = acCurDb.TransactionManager.StartTransaction(); LayerTableRecord acLyrTblRec; acLyrTblRec = acTrans.GetObject(acCurDb.LayerZero,OpenMode.ForRead) as LayerTableRecord; acTrans.Dispose(); 下面的示例代码演示不再需要事务时使用 Using 语句关闭事务(释放内存)。Using 语句是优先选用的 编码方式。 Document acCurDb = Application.DocumentManager.MdiActiveDocument.Database;


网友评论