数据库中包含的每个对象都分配了几个唯一的 ID。访问对象的独特方式包括:
访问对象的最常见方法是通过其 ObjectId。如果项目同时使用 COM 互操作和托管的 AutoCAD .NET API,ObjectId 可以很好地工作。如果创建自定义 AutoLISP 函数,则可能需要使用实体句柄。 手柄在AutoCAD任务之间是持久的,因此,如果需要将图形信息导出到外部文件(以后可能需要使用该文件来更新图形),则手柄是访问对象的最佳方式。数据库中对象的 ObjectId 仅在数据库加载到内存中时存在。关闭数据库后,分配给对象的 ObjectId 将不再存在,并且下次打开数据库时可能会有所不同。 获取 ObjectId在处理对象时,需要先获取 ObjectId,然后才能打开对象进行查询或编辑。打开图形文件时,将 ObjectId 分配给数据库中的现有对象,并在首次创建新对象时为其分配 ObjectId。通常通过以下方式获取数据库中现有对象的 ObjectId:
打开对象获取对象 ID 后,该函数用于打开分配了给定对象 ID 的对象。可以在以下模式之一中打开对象:GetObject
您应以最适合访问对象的情况的模式打开对象。由于创建撤消记录,打开对象进行写入会引入比可能需要的额外开销。如果不确定要打开的对象是否是要使用的对象,则应打开它进行读取,然后将对象从读取模式升级为写入模式。有关升级对象的详细信息,请参阅“升级和降级打开的对象 (.NET)”。 和 函数都返回一个对象。使用某些编程语言时,您需要根据值分配给的变量来强制转换返回的值。如果您使用的是 VB.NET,则无需担心强制转换返回值,因为它已为您完成。GetObjectOpen 使用动态运行时语言 (DLR) 时,无需担心打开对象进行读取或写入。对象的打开是透明的,在不使用事务的情况下提交对对象所做的更改的过程也是如此。 以下示例演示如何获取当前数据库的 for Layer Zero。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() 下面的示例使用该语句在不再需要事务后释放该事务。该语句是首选的编码样式。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(); 下面的示例使用该语句在不再需要事务后释放该事务。该语句是首选的编码样式。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 苏公网安备32011402011833)
GMT+8, 2025-1-8 19:07
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.