打开和关闭数据库对象
每个对象都可以用三种不同的方式引用:AcDbObject
当AutoCAD未运行时,图形将存储在文件系统中。DWG 文件中包含的对象由其控点标识。 图形打开后,可通过对象访问图形信息。数据库中的每个对象都有一个对象 ID,该 ID 在整个当前编辑会话中一直存在,从创建到删除对象所在的对象。open 函数将对象 ID 作为参数,并返回指向对象的指针。在对象关闭之前,此指针一直有效,如下图所示。AcDbDatabaseAcDbDatabaseAcDbObject ![]() 您可以使用全局函数打开对象。acdbOpenObject() 您可以使用该函数将句柄映射到对象 ID。getAcDbObjectId() 您也可以打开一个对象,然后请求其句柄: AcDbObject* pObject; AcDbHandle handle; pObject->getAcDbHandle(handle); 注意:每当打开数据库对象时,都应尽早将其关闭。您可以使用该函数关闭数据库对象。AcDbObject::close()
an 等价于 .AcDb 库提供了两个独立的函数,允许您在 an 和 之间进行转换:ads_nameAcDbObjectIdAcDbObjectIdads_name // Returns an ads_name for a given object ID.
//
acdbGetAdsName(ads_name& objName,
AcDbObjectId objId);
// Returns an object ID for a given ads_name.
//
acdbGetObjectId(AcDbObjectId& objId,
ads_name objName);
通常,通过选择获取对象,并以窗体形式返回该对象。然后,您需要交换并打开它。以下函数演示了此过程:ads_nameads_nameAcDbObjectId AcDbEntity*
selectEntity(AcDbObjectId& eId, AcDb::OpenMode openMode)
{
ads_name en;
ads_point pt;
acedEntSel("\nSelect an entity: ", en, pt);
// Exchange the ads_name for an object ID.
//
acdbGetObjectId(eId, en);
AcDbEntity * pEnt;
acdbOpenObject(pEnt, eId, openMode);
return pEnt;
}
您可以在以下三种模式之一中打开对象:
下表显示了当您尝试以不同模式打开对象并且该对象已打开时返回的错误代码。
如果您尝试打开一个对象进行写入,并且收到错误,则可以使用该对象只有一个读取器时将打开状态升级为写入。然后,您将用于将其状态降级为读取。同样,如果对象处于打开状态以进行通知(例如,当您收到通知时),并且您想要打开它进行写入,则可以使用将其打开状态升级为写入。然后,您将使用降级其状态进行通知。eWasOpenForReadupgradeOpen()downgradeOpen()upgradeFromNotify()downgradeToNotify() 有关如何管理打开和关闭对象的复杂序列的更多信息,请参见“事务管理器”部分。 父主题: |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-10-29 07:06
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.