AcDbObjectId

 

AutoCAD R13版本开始,出现处理内存中数据库驻留对象的一个机制。处理方法对于每个对象有两部分。首先有一个数据库驻留对象,其驻留在内存中且在内存需要被释放时可写出至磁盘。第二部分是一个“stub”对象(AcDbStub类),总是驻留在内存中且作为DRO的访问点。

当一个对象或实体第一次被增加至数据库中,一个新的stub对象被创建且设为指向被增加至数据库的对象和实体。这个stub在内存中的地址作为增加至数据库中的对象或实体的ads_nameAcDbObjectId使用。当一个数据库从磁盘读入内存中时使用相同的机制。

在一个DRO被打开时,在ObjectARX应用程序中,DROobjectId传递至打开的调用中并返回一个实际的DRO指针。其中objectIdstub在内存中的地址,因此stub可用于取得实际的DRO。如果DRO被写出(paged out),则它被读入内存(paged in)并返回它的新地址。

因此,一个AcDbObjectId对象是DROstub的地址的容器。同样的,这是一个非常重要的对象,因为它包含着DRO仅有的工作任务中持久的定位器。

 

继承自

 

包含文件

dbid.h

 

提示

在可能时,将自定义对象和实体的objectId写入文件或从文件中读出,因为它们在输入或输出时会被自动变换(至对象的句柄),因此它们可总是在工作任务至工作任务之间标识相同的对象。当写出objectId时,要确定以正确的子类型(AcDbHardPointerId, AcDbSoftOwnershipId)写出,从而ObjectARX内部机制将正确地识别它们。

如果需要将一个对象标识符储存至一个文件(即,不是一个DWGDXF文件),则不能使用objectIdsobjectId中的实际值在一个工作任务至另一个工作任务(它是一个内存地址)之间不同。在这种情况下,需要储存对象的句柄而不是它的objectId。如果使用多个图形文件,则需要储存图形文件名和句柄,因为句柄值在多个文件中可能不惟一。

如果有一个句柄且想得到它指向的对象的objectId,则需要使用AcDbDatabase::getAcDbObjectId() 函数。

如果有一个objectId且想得到它标识的对象的句柄,则需要使用打开这个对象并使用它的AcDbObject::getAcDbHandle() 函数。

 

参见

AcDbHardOwnershipId, AcDbHardPointerId, AcDbSoftOwnershipId, AcDbSoftPointerId, AcDbHandle

 

成员

 

AcDbObjectId赋值操作符

AcDbObjectId::operator = 函数

inline AcDbObjectId &

operator =(

const AcDbObjectId& id);

id

传递要复制的objectId

将数据从id复制至AcDbObjectId对象。返回AcDbobjectId对象的一个参考。


inline AcDbObjectId &

operator =(

const AcDbStub* pStub);

pStub

未说明

仅供AutoCAD内部使用。

 

AcDbObjectId比较操作符

AcDbObjectId::operator != 函数

bool

operator !=(

const AcDbObjectId& unnamed) const;

unnamed

输入要比较的objectId

如果id中的值不等于*this中的值则返回true,否则返回false


bool

operator !=(

const AcDbStub* unnamed) const;

unnamed

仅供AutoCAD内部使用

仅供AutoCAD内部使用。

 

AcDbObjectId::operator < 函数

bool

operator <(

const AcDbObjectId& unnamed) const;

unnamed

输入要比较的objectId

如果id中的值大于*this中的值则返回true,否则返回false


bool

operator <(

const AcDbStub* unnamed) const;

unnamed

仅供AutoCAD内部使用

仅供AutoCAD内部使用。

 

AcDbObjectId::operator <= 函数

bool

operator <=(

const AcDbObjectId& unnamed) const;

unnamed

输入要比较的objectId

如果id中的值大于或等于*this中的值则返回true,否则返回false


bool

operator <=(

const AcDbStub* unnamed) const;

unnamed

仅供AutoCAD内部使用

仅供AutoCAD内部使用。

 

AcDbObjectId::operator == 函数

bool

operator ==(

const AcDbObjectId& unnamed) const;

unnamed

输入要比较的objectId

如果id中的值等于*this中的值则返回true,否则返回false


bool

operator ==(

const AcDbStub* unnamed) const;

unnamed

仅供AutoCAD内部使用

仅供AutoCAD内部使用。

 

AcDbObjectId::operator > 函数

bool

operator >(

const AcDbObjectId& unnamed) const;

unnamed

输入要比较的objectId

如果id中的值小于*this中的值则返回true,否则返回false


bool

operator >(

const AcDbStub* unnamed) const;

unnamed

仅供AutoCAD内部使用

仅供AutoCAD内部使用。

 

AcDbObjectId::operator >= 函数

bool

operator >=(

const AcDbStub* unnamed) const;

unnamed

仅供AutoCAD内部使用

仅供AutoCAD内部使用。


bool

operator >=(

const AcDbObjectId& unnamed) const;

unnamed

输入要比较的objectId

如果id中的值小于或等于*this中的值则返回true,否则返回false

 

AcDbObjectId建构器和析构器

AcDbObjectId::AcDbObjectId 函数

inline

AcDbObjectId(

const AcDbStub* pStub);

pStub

未说明

仅供AutoCAD内部使用。


inline

AcDbObjectId();

如果这是在建构后应用至此对象的第一个操作,则以isNull()确定返回true的方法初始化AcDbObjectId

 

AcDbObjectId变换函数

AcDbObjectId::operator AcDbStub* 函数

inline

operator AcDbStub*() const;

仅供AutoCAD内部使用。

 

AcDbObjectId编辑函数

AcDbObjectId::setFromOldId 函数

inline AcDbObjectId &

setFromOldId(

long oldId);

oldId

输入放置在objectId中的旧样式(ads_name)

oldId值复制至AcDbObjectId对象的数据成员中。这实际上是将一个ads_name值复制至AcDbObjectId中。返回AcDbObjectId对象的一个参照。

 

AcDbObjectId::setNull 函数

inline void

setNull();

此函数将清除对象ID,从而它具有一个空值(0)。此函数还可用于代替向一个对象ID赋值AcDbObjectId::kNull。它总是允许使用更多的紧凑的表达式并帮助编译器生成更优的代码(它可识别AcDbObjectId为零而无须查找kNull对象)

 

AcDbObjectId其他函数

AcDbObjectId::objectLeftOnDisk 函数

bool

objectLeftOnDisk() const;

未说明

 

AcDbObjectId查询函数

AcDbObjectId::asOldId 函数

inline long

asOldId() const;

以一个长整数返回objectId值,这是一个旧的ads_name格式(一个ads_name是一个具有两个长整数的数组,它的第一个元素包含内容与一个objectId中的相同)

 

AcDbObjectId::convertToRedirectedId 函数

void

convertToRedirectedId();

如果对象已经从另一个数据库从定向,则此函数将取得这个对象的对象ID,且将其转换至另一个数据库中的实际的对象ID(例如:来自一个xref数据库的对象ID)。如果此对象ID没有重定向或有一个AcDbObjectId::kNull值,则此函数不执行任何操作。

 

AcDbObjectId::database 函数

AcDbDatabase *

database() const;

此函数返回对象ID驻留的数据库的指针。如果对象IDNULL,则返回NULL

 

AcDbObjectId::handle 函数

AcDbHandle

handle() const;

此函数返回与对象ID关联的对象的句柄。

 

AcDbObjectId::isEffectivelyErased 函数

bool

isEffectivelyErased() const;

如果对象与这个对象ID关联或对象的宿主层次中的任何宿主(即,对象的宿主、对象的宿主的宿主等)被删除则返回true

注意:此方法在每一个对象上使用ownerId()方法以找出层次中的下一个宿主。如果宿主层次(不是顶级符号表或命名的对象词典对象)中有任何对象没有设置它们的宿主Id,则这个方法将不能遍历所有的宿主链。如果这发生了或任何宿主对象不能被打开用于读取,则此方法返回true

 

AcDbObjectId::isErased 函数

bool

isErased() const;

如果与此是对象ID关联的对象被删除,则此函数返回true。否则返回false

 

AcDbObjectId::isNull 函数

inline bool

isNull() const;

如果对象ID有一个空值(0)false(false)则此函数返回true(true)。它总是允许使用更多的紧凑的表达式并帮助编译器生成更优的代码(它可识别AcDbObjectId为零而无须查找kNull对象)

 

AcDbObjectId::isValid 函数

bool

isValid() const;

如果对象ID与当前在内存中的一个数据库关联,则此函数返回true。如果对象ID与一个不再可用的数据库关联(换言之,已被删除),则返回false

如果此方法返回false,则不应使用对象ID

 

AcDbObjectId::nonForwardedHandle 函数

AcDbHandle

nonForwardedHandle() const;

如果此对象ID在一个xref数据库中且与此对象ID关联的对象已被重定向至宿主数据库,则此方法将返回xref数据库中的句柄。如果与此对象ID关联的对象不来自xref数据库或没有重定向,则此方法与AcDbObjectId::handle()相同。

 

AcDbObjectId::originalDatabase 函数

AcDbDatabase *

originalDatabase() const;

如果此对象ID在一个xref数据库中且与此对象ID关联的对象已重定向至宿主数据库,则此方法将返回xref数据库的指针。如果与此对象ID关联的对象不来自xref数据库或没有重定向,则此方法与AcDbObjectId::database()相同。

 

成员数据

const AcDbObjectId kNull

unsigned long mId