每个对象都可以用三种不同的方式引用:AcDbObject
当 AutoCAD 未运行时,图形将存储在文件系统中。DWG 文件中包含的对象由其控点标识。 打开图形后,可通过对象访问图形信息。数据库中的每个对象都有一个对象 ID,该 ID 在当前编辑会话中一直存在,从创建到删除对象所在的会话。打开函数将对象 ID 作为参数,并返回指向对象的指针。此指针在对象关闭之前有效,如下图所示。AcDbDatabaseAcDbDatabaseAcDbObject ![]() 您可以使用全局函数打开对象。acdbOpenObject() 您可以使用函数将句柄映射到对象 ID。getAcDbObjectId() 您还可以打开一个对象,然后请求其句柄: AcDbObject* pObject; AcDbHandle handle; pObject->getAcDbHandle(handle); 注意:每当打开数据库对象时,都应尽早将其关闭。可以使用函数关闭数据库对象。AcDbObject::close()
Anis 相当于 an。AcDb 库提供了两个独立的函数,允许您在 anand 和 之间进行转换: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-27 05:11
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.