AcDbObjectId类
从AutoCAD R13版本开始,出现处理内存中数据库驻留对象的一个机制。处理方法对于每个对象有两部分。首先有一个数据库驻留对象,其驻留在内存中且在内存需要被释放时可写出至磁盘。第二部分是一个“stub”对象(AcDbStub类),总是驻留在内存中且作为DRO的访问点。
当一个对象或实体第一次被增加至数据库中,一个新的stub对象被创建且设为指向被增加至数据库的对象和实体。这个stub在内存中的地址作为增加至数据库中的对象或实体的ads_name和AcDbObjectId使用。当一个数据库从磁盘读入内存中时使用相同的机制。
在一个DRO被打开时,在ObjectARX应用程序中,DRO的objectId传递至打开的调用中并返回一个实际的DRO指针。其中objectId是stub在内存中的地址,因此stub可用于取得实际的DRO。如果DRO被写出(paged out),则它被读入内存(paged in)并返回它的新地址。
因此,一个AcDbObjectId对象是DRO的stub的地址的容器。同样的,这是一个非常重要的对象,因为它包含着DRO仅有的工作任务中持久的定位器。
继承自
无
包含文件
dbid.h
提示
在可能时,将自定义对象和实体的objectId写入文件或从文件中读出,因为它们在输入或输出时会被自动变换(至对象的句柄),因此它们可总是在工作任务至工作任务之间标识相同的对象。当写出objectId时,要确定以正确的子类型(AcDbHardPointerId, AcDbSoftOwnershipId等)写出,从而ObjectARX内部机制将正确地识别它们。
如果需要将一个对象标识符储存至一个文件(即,不是一个DWG或DXF文件),则不能使用objectIds。objectId中的实际值在一个工作任务至另一个工作任务(它是一个内存地址)之间不同。在这种情况下,需要储存对象的句柄而不是它的objectId。如果使用多个图形文件,则需要储存图形文件名和句柄,因为句柄值在多个文件中可能不惟一。
如果有一个句柄且想得到它指向的对象的objectId,则需要使用AcDbDatabase::getAcDbObjectId() 函数。
如果有一个objectId且想得到它标识的对象的句柄,则需要使用打开这个对象并使用它的AcDbObject::getAcDbHandle() 函数。
参见
AcDbHardOwnershipId, AcDbHardPointerId, AcDbSoftOwnershipId, AcDbSoftPointerId, AcDbHandle
成员
AcDbObjectId::operator = 函数 inline AcDbObjectId & operator =( const AcDbObjectId& id);
将数据从id复制至AcDbObjectId对象。返回AcDbobjectId对象的一个参考。 inline AcDbObjectId & operator =( const AcDbStub* pStub);
仅供AutoCAD内部使用。 |
AcDbObjectId::operator != 函数 bool operator !=( const AcDbObjectId& unnamed) const;
如果id中的值不等于*this中的值则返回true,否则返回false。 bool operator !=( const AcDbStub* unnamed) const;
仅供AutoCAD内部使用。 |
||||
AcDbObjectId::operator < 函数 bool operator <( const AcDbObjectId& unnamed) const;
如果id中的值大于*this中的值则返回true,否则返回false。 bool operator <( const AcDbStub* unnamed) const;
仅供AutoCAD内部使用。 |
||||
AcDbObjectId::operator <= 函数 bool operator <=( const AcDbObjectId& unnamed) const;
如果id中的值大于或等于*this中的值则返回true,否则返回false。 bool operator <=( const AcDbStub* unnamed) const;
仅供AutoCAD内部使用。 |
||||
AcDbObjectId::operator == 函数 bool operator ==( const AcDbObjectId& unnamed) const;
如果id中的值等于*this中的值则返回true,否则返回false。 bool operator ==( const AcDbStub* unnamed) const;
仅供AutoCAD内部使用。 |
||||
AcDbObjectId::operator > 函数 bool operator >( const AcDbObjectId& unnamed) const;
如果id中的值小于*this中的值则返回true,否则返回false。 bool operator >( const AcDbStub* unnamed) const;
仅供AutoCAD内部使用。 |
||||
AcDbObjectId::operator >= 函数 bool operator >=( const AcDbStub* unnamed) const;
仅供AutoCAD内部使用。 bool operator >=( const AcDbObjectId& unnamed) const;
如果id中的值小于或等于*this中的值则返回true,否则返回false。 |
AcDbObjectId::AcDbObjectId 函数 inline AcDbObjectId( const AcDbStub* pStub);
仅供AutoCAD内部使用。 inline AcDbObjectId(); 如果这是在建构后应用至此对象的第一个操作,则以isNull()确定返回true的方法初始化AcDbObjectId。 |
AcDbObjectId::operator AcDbStub* 函数 inline operator AcDbStub*() const; 仅供AutoCAD内部使用。 |
AcDbObjectId::setFromOldId 函数 inline AcDbObjectId & setFromOldId( long oldId);
将oldId值复制至AcDbObjectId对象的数据成员中。这实际上是将一个ads_name值复制至AcDbObjectId中。返回AcDbObjectId对象的一个参照。 |
||
AcDbObjectId::setNull 函数 inline void setNull(); 此函数将“清除”对象ID,从而它具有一个空值(0)。此函数还可用于代替向一个对象ID赋值AcDbObjectId::kNull。它总是允许使用更多的紧凑的表达式并帮助编译器生成更优的代码(它可识别AcDbObjectId为零而无须查找kNull对象)。 |
AcDbObjectId::objectLeftOnDisk 函数 bool objectLeftOnDisk() const; 未说明 |
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驻留的数据库的指针。如果对象ID为NULL,则返回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 |