数据库中包含的每个对象都分配有多个唯一 ID。访问对象的独特方式包括:
访问对象的最常见方法是通过其 ObjectId。如果您的项目同时使用 COM 互操作和托管的 AutoCAD .NET API,ObjectId 可以很好地工作。如果创建自定义 AutoLISP 函数,则可能需要使用实体句柄。 手柄在 AutoCAD 会话之间是永久性的,因此如果需要将图形信息输出到以后可能需要用于更新图形的外部文件,则控制滑块是访问对象的最佳方式。数据库中对象的 ObjectId 仅在数据库加载到内存中时存在。关闭数据库后,分配给对象的 ObjectId 将不再存在,并且在下次打开数据库时可能会有所不同。 获取对象标识使用对象时,需要先获取 ObjectId,然后才能打开对象进行查询或编辑。打开图形文件时,会将 ObjectId 指定给数据库中的现有对象,并在首次创建新对象时为其指定 ObjectId。通常通过以下方式获取数据库中现有对象的 ObjectId:
打开对象获得对象 ID 后,该函数用于打开分配了给定对象 ID 的对象。可以在以下模式之一中打开对象:GetObject
您应该以最适合访问对象的模式打开对象。打开对象进行写入会带来额外的开销,而不是由于创建撤消记录而可能需要的额外开销。如果不确定要打开的对象是否是要使用的对象,则应将其打开以进行读取,然后将对象从读取模式升级到写入模式。有关升级对象的详细信息,请参阅“升级和降级打开的对象 (.NET)”。 这两个函数都返回一个对象。使用某些编程语言时,需要根据值赋值的变量强制转换返回值。如果您使用的是 VB.NET,则无需担心强制转换返回值,因为它是为您完成的。GetObjectOpen 使用动态运行时语言 (DLR) 时,无需担心打开对象进行读取或写入。对象的打开是透明地处理的,在不使用事务的情况下提交对对象所做的更改的过程也是如此。 以下示例演示如何获取当前数据库的 for 层零。LayerTableRecord VB.NET下面的示例在不再需要事务后手动释放事务。 Dim acCurDb As Document = Application.DocumentManager.MdiActiveDocument.Database Dim acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() Dim acLyrTblRec As LayerTableRecord acLyrTblRec = acTrans.GetObject(acCurDb.LayerZero, OpenMode.ForRead) acTrans.Dispose() 下面的示例使用 the语句在不再需要事务后释放事务。语句是首选的编码样式。UsingUsing Dim acCurDb As Document = Application.DocumentManager.MdiActiveDocument.Database Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() Dim acLyrTblRec As LayerTableRecord acLyrTblRec = acTrans.GetObject(acCurDb.LayerZero, OpenMode.ForRead) End Using C#下面的示例在不再需要事务后手动释放事务。 Document acCurDb = Application.DocumentManager.MdiActiveDocument.Database; Transaction acTrans = acCurDb.TransactionManager.StartTransaction(); LayerTableRecord acLyrTblRec; acLyrTblRec = acTrans.GetObject(acCurDb.LayerZero, OpenMode.ForRead) as LayerTableRecord; acTrans.Dispose(); 下面的示例使用 the语句在不再需要事务后释放事务。语句是首选的编码样式。UsingUsing Document acCurDb = Application.DocumentManager.MdiActiveDocument.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { LayerTableRecord acLyrTblRec; acLyrTblRec = acTrans.GetObject(acCurDb.LayerZero, OpenMode.ForRead) as LayerTableRecord; } |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )
GMT+8, 2024-5-19 15:02
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.